欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中算法---选择排序

程序员文章站 2022-06-06 20:42:29
...

原理每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)

简单选择排序的的基本思想:给定的集合数组arr,第一趟排序,假定0位置的值是最小值,在待排序数组arr[1] ~ arrn[n]中逐个比较,选出最小值数的下标,让他与下标为0的数据进行互换位置;第二趟排序,假定1位置的值是最小值,在待排序数组arr[2] ~ arr[n]中逐个比较,选出最小值的下标,让他与位置1的数据进行互换位置。。。。知道全部排序完后完成。

举例说明:一个集合数据为arr = {8, 9, 6, 3, 5, 7}

第一趟排序,假定一开始的最小是0位元素,也就是8。设定一个int型值m用来记录最小值的下标,此时m=0;用arr[m]依次比较arr[1] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[1] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[0]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 9, 6, 8, 5, 7];

第二趟排序,假定一开始的最小是1位元素,也就是9。设定一个int型值m用来记录最小值的下标,此时m=1;用arr[m]依次比较arr[2] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[2] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[1]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 8, 9, 7];

第三趟排序,假定一开始的最小是2位元素,也就是6。设定一个int型值m用来记录最小值的下标,此时m=2;用arr[m]依次比较arr[3] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[3] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[2]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 8, 9, 7];

第四趟排序,假定一开始的最小是3位元素,也就是8。设定一个int型值m用来记录最小值的下标,此时m=3;用arr[m]依次比较arr[34 ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[4] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[3]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 7, 9, 8];

第五趟排序,假定一开始的最小是4位元素,也就是9。设定一个int型值m用来记录最小值的下标,此时m=4;用arr[m]依次比较arr[5] ~ arr[n]的数值,如果arr[m]大于arr[x]比较的值,则将m的值设置为x;将arr[5] ~ arr[n]的数值全部比较完后,找到arr数组中最小值的下标元素m,将arr[m]的值与一开始假定的最小值arr[4]进行互换位置,就可以得到第一趟排序后的数据结果:[3, 5, 6, 7, 8, 9];

代码实现:

/** 选择排序 */
List<Integer> integerList = new ArrayList<>();
List<Integer> newsList = new ArrayList<>();
Integer[] integers = {8, 9, 6, 3, 5, 7};
Collections.addAll(integerList, integers);
System.out.println("排序前:" + integerList);

for(int i=0; i<integerList.size()-1; i++) {
    int m = i;
    for(int j=i+1; j<integerList.size(); j++) {
        // 找出最小的值的下标
        if(integerList.get(m) > integerList.get(j)) {
            m = j;
        }
    }
    //找到最小数值后,互换位置
    if(i != m) {
        int temp = integerList.get(i);
        integerList.set(i, integerList.get(m));
        integerList.set(m, temp);
    }
    System.out.println("第" + (i+1) + "趟排序后:" + integerList);
}
System.out.println("最总排序结果为:" + integerList);

 

Java中算法---选择排序

相关标签: 选择排序