简单选择排序是一种选择排序。
选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
简单排序处理流程
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
如图所示,每趟排序中,将当前第 i 小的元素放在位置 i 上。
核心代码
publicvoidselectionSort(int[]list){//需要遍历获得最小值的次数//要注意一点,当要排序N个数,已经经过N-1次遍历后,已经是有序数列for(inti=0;i< list.length - 1; i++) { int temp = 0; int index = i; // 用来保存最小值得索引 // 寻找第i个小的数值 for (int j = i + 1; j < list.length; j++) { if (list[index] >list[j]){index=j;}}//将找到的第i个小的数值放在第i个位置上temp=list[index];list[index]=list[i];list[i]=temp;System.out.format("第%d趟: ",i+1);printAll(list);}}算法分析
简单选择排序算法的性能
时间复杂度
简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2。
而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.
当序列反序时,移动次数最多,为3N (N - 1) / 2。
所以,综合以上,简单排序的时间复杂度为O(N2)。
空间复杂度
简单选择排序需要占用 1 个临时空间,在交换数值时使用。
完整参考代码
JAVA版本
代码实现
1packagenotes.javase.algorithm.sort;23importjava.util.Random;45publicclassSelectionSort{67publicvoidselectionSort(int[]list){8//需要遍历获得最小值的次数9//要注意一点,当要排序N个数,已经经过N-1次遍历后,已经是有序数列10for(inti=0;i< list.length - 1; i++) {11 int temp = 0;12 int index = i; // 用来保存最小值得索引13 14 // 寻找第i个小的数值15 for (int j = i + 1; j < list.length; j++) {16 if (list[index] >list[j]){17index=j;18}19}2021//将找到的第i个小的数值放在第i个位置上22temp=list[index];23list[index]=list[i];24list[i]=temp;2526System.out.format("第%d趟: ",i+1);27printAll(list);28}29}3031//打印完整序列32publicvoidprintAll(int[]list){33for(intvalue:list){34System.out.print(value+" ");35}36System.out.println();37}3839publicstaticvoidmain(String[]args){40//初始化一个随机序列41finalintMAX_SIZE=10;42int[]array=newint[MAX_SIZE];43Randomrandom=newRandom();44for(inti=0;i< MAX_SIZE; i++) {45 array[i] = random.nextInt(MAX_SIZE);46 }47 48 // 调用冒泡排序方法49 SelectionSort selection = new SelectionSort();50 System.out.print("排序前: ");51 selection.printAll(array);52 selection.selectionSort(array);53 System.out.print("排序后: ");54 selection.printAll(array);55 }56 57 }
运行结果
排序前:3528120841第1趟:0528123841第2趟:0128523841第3趟:0118523842第4趟:0112583842第5趟:0112283845第6趟:0112238845第7趟:0112234885第8趟:0112234588第9趟:0112234588排序后:0112234588
-
算法
+关注
关注
23文章
4607浏览量
92837 -
代码
+关注
关注
30文章
4779浏览量
68524 -
排序
+关注
关注
0文章
31浏览量
9707
原文标题:排序算法总结(6):简单选择排序
文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论