首页 > 编程知识 正文

直接排序算法,选择排序是不是稳定的

时间:2023-05-04 15:11:11 阅读:147702 作者:1186

一.算法描述:一.选择排序是一种简单直观的排序算法。

2 .选择排序的基本思路:

每次从要排序的数据元素中选择最小值或最大值的元素时,排序顺序都位于已排序列的末尾,直到对所有要排序的数据元素进行排序。

例如,在长度为n的无序阵列中,首先遍历n个数据,找到其中最小的数值与第一个元素交换; 在第二次扫描中找到剩下的N-1个数据,找到其中最小的数值并与第二个元素进行交换……在第N-1次扫描中找到剩下的两个数据,找到其中最小的数值并与第N-1个元素进行交换,至此完成了选择排序

2 .算法分析:需求:定义函数接收int型数组对象,按照从大到小的顺序对数组中的元素进行排序。 数组元素的初始值为[ 12,5,17,8,9 ]

1 .初步排序结果及其分析:

(结果)将最大值放在开头,第1次排序结果为[ 17,5,12,8,9 ]

)2)键码:

for(intI=1; i arr.length; I () if ) arr[I]arr[0] ) /更换位置int temp=arr[i]; arr[i]=arr[0]; arr[0]=temp; }

)3)分析:

以arr[0]为基准,从i=1开始依次遍历其馀元素,如果存在大于arr[0]的元素,则与arr[0]交换位置。 例如,用给定的原始数组进行比较的过程如下。

以存储在arr[0]中的数据12为基准,与之前存储在arr[1]中的数据5相比,由于12大于5,因此不需要更换。

仍然存储在arr[0]中的数据12作为基准,与此外存储在arr[2]中的数据17相比,12需要小于17并且交换位置。

此时,以存储于arr[0]中的数据17为基准,与存储于arr[3]中的数据8相比,17大于8,无需交换位置。

以仍存储在arr[0]中的数据17为基准,此外,与存储在arr[4]中的数据9相比,17大于9,不需要交换位置。

经过以上比较,将最大值17放在了第一位。

2 .第二次排序结果及其分析:

(1)结果)将第二大数据置于第二位置。 第二次排序的结果为[ 17,12,5,8,9 ]。

)2)键码:

for(intI=2; i arr.length; I () if ) arr[I]arr[1] ) {int temp=arr[i]; arr[i]=arr[1]; arr[1]=temp; }

)3)分析:

由于第一次已经将最大值置于开头,因此第二次排序不需要管理存储在arr[0]中的数据,而是利用“arr[1]”从i=2开始顺序遍历剩馀元素,如果大于arr[1],则使用arr[1] 比较过程如下。

作为存储在arr[1]中的数据5的基准,与先前存储在arr[2]中的数据12相比,由于12大于5,因此更换位置。

此时,以存储在arr[1]中的数据12为基准,与存储在arr[3]中的数据8相比,12需要大于8并交换位置。

相对于仍存储在arr[1]中的数据12,与存储在arr[4]中的数据9相比,12大于9,不需要交换位置。

经过以上比较,将第二大数值12放在了第二位置。

3 .第三次排序结果及其分析

(1)结果)将第三大数据置于第三位置。 第三次排序的结果为[ 17,12,9,5,8 ]。

)2)键码:

for(intI=3; i arr.length; I () if ) arr[I]arr[2] ) {int temp=arr[i]; arr[i]=arr[2]; arr[2]=temp; }

)3)分析:

由于第二次已经将最大值置于第二位置,因此第三次排序不需要管理存储在arr[1]中的数据,而是根据arr[2]从i=3开始顺序遍历剩馀元素,如果有大于arr[2]的元素,则进行排序比较过程如下。

作为存储在arr[2]中的数据5的基准,与之前存储在arr[3]中的数据8相比,5小于8,因此需要交换位置。

在此情况下,存储在arr[2]中的数据8作为基准,与进一步存储在arr[4]中的数据9相比,8需要小于9并交换位置。

经过以上比较,将第三大数值9放在了第三个位置。

4 .第四次排序结果及其分析

(1)结果)将第四大数据置于第四位置。 第四次排名的结果为[17、12、9、8、5]。

)2)键码:

for(intI=4; i arr.length; I () if ) arr[I]arr[3] ) {int temp=arr[i]; arr[i]=arr[3]; arr[3]=temp; (3)分析:

由于第三次已经将最大值置于第三个位置,因此第四次排序不需要管理存储在arr[2]中的数据,而是从i=4开始相对于arr[3]顺序遍历剩馀元素,如果有的大于arr[3] 比较过程如下。

作为存储在arr[3]中的数据5的基准,与之前存储在arr[4]中的数据8相比,5小于8,因此需要交换位置。

经过以上比较,将第四大数值8放在了第四个位置。 总共有五个数据,前四个已经按从大到小的顺序排序,所以最后一个数据的位置也是确定的。

3 .算法的实现

class demo5{ publicstaticvoidmain (string [ ] args ) int [ ] arr={ 12,5,17,8,9 }; 对于//5要素的数组,只要找到4个最大值就可以排序。 选择(arr ); } publicstaticvoidselectsort (int [ ] arr ) for ) intj=0; j arr.length-1; j ()//控制的是回合数。 减少1的理由是,5个元素只需寻找//4个最大值for。 (intI=j1; i arr.length; I ) )//最大值if(arr[I]arr[j] ) ) /更换位置int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; }//遍历数组,查找效果System.out.print ('当前元素:'); for(intI=0; iarr.length; I ) (system.out.print ) arr[I] ),); } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。