您的位置:首页 > 其它

选择排序

2018-11-03 11:08 169 查看

文章目录

选择排序(SELECTION SORT)

原理

初始时在序列中找到最小元素,放在序列的起始位置作为已排序序列;然后,再从剩余未排序的元素中继续寻找最小元素,放到已排序序列的末尾,依此类推,直至所有元素排序完毕。
注意选择排序和冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法元素的位置,从而将当前最小元素放到合适的位置;而选择排序每遍历依次都记住了当前最小元素的位置,最后仅需要一次交换操作即可将其放到合适的位置。

动态效果示意图

思路

给定数组 a
第一趟排序,在待排序的 n 个元素中选出最小的那个,将它与 a[1] 交换;
第二趟排序,在待排序数据 a[2] ~ a
中选出最小的数据,将它与 a[2] 交换;
第三趟排序,…
依次类推
第 n - 1 趟排序,在待排序的 a[n-1] ~ a
中选出最小的数据,将它与 a[n-1] 交换;
排序完成。

  • 举例说明
    5,2,8,4,9,1
    ============================================================================================
    第一趟排序:原始数据:5,2,8,4,9,1
    最小数据为1,1 放在首位,也就是 1 和 5 交换位置
    排序结果:1,2,8,4,9,5
    ============================================================================================
    第二趟排序:除 1 以外的数据 2,8,4,9,5 进行比较,2 最小
    自己和自己交换
    排序结果:1,2,8,4,9,5
    ============================================================================================
    第三趟排序:除 1、2 以外的数据 8,4,9,5 进行比较,4 最小
    8 和 4 交换
    排序结果:1,2,4,8,9,5
    ============================================================================================
    第四趟排序:除 1、2、4 以外的数据 8,9,5 进行比较,5 最小
    8 和 5 交换
    排序结果:1,2,4,5,9,8
    ============================================================================================
    第五趟排序:除 1、2、4、5 以外的数据 9,8 进行比较,8 最小
    9 和 8 交换
    排序结果:1,2,4,5,8,9
    ============================================================================================

每一趟获得最小数的方法;使用 for 循环进行比较,定义一个变量 temp,首先前两个数进行比较,把较小的数放在 temp 中,然后用 temp 再去跟剩下的数据比较,如果出现比 temp 小的数据,就用它来替代 temp 中原有的数据。

//选择排序算法
public static void selectionSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) { //控制循环的趟数
int k = i; //用k来记录最小数的位置
for (int j = i+1; j < arr.length; j++) { //利用循环找到未排序序列中最小的那个数
if(arr[j] < arr[k])
k = j;
}
//内层循环结束,找到本次循环的最小数,进行交换
if(i != k){
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}

选择排序算法改进

选择排序的思想是在要排序的一组数中,选出最小的那个数,然后与第一位置的数进行交换;然后再剩下的数中,找出最小的那个数与第二个数进行交换,直到第 n-1 个数与第 n 个数比较为止。而二元选择排序,顾名思义,从待排序的数组中找出一个最大值和一个最小值,分别与第一个数、最后一个数进行交换,这样可以使选择排序的时间复杂度降低,所以外层循环从 n 次变为了 n/2 次。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: