Java中算法---选择排序
原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在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);
上一篇: 堆排序与堆排序算法
下一篇: PHP队列原理及基于队列的写文件案例