java实现选择排序
2017-08-06 18:05
232 查看
我之前已经谈到过冒泡排序,今天我们来玩玩选择排序
那么同样的首先我们要了解什么是选择排序,选择排序就是每次选定第一个为最大值,或者最小值,如果我们要进行降序排列,那么我们就将第一个作为最大值,然后遍历整个数组,如果有比这个数还大的,就交换,然后继续遍历,那么第一轮下来我们就找到了最大的一个,那么我们将第二个作为最大值,然后依次遍历,
这里我们可以总结一下,其实选择和冒泡排序很像,冒泡是将最小的或最大的放在了最后一个,而选择排序是放在第一个
选择排序是从前到后排序,,,而冒泡是从后到前排序,
那么下面我们举个例子来说明
3,7,1,4,9降序排列
第一轮将第一个数作为最大值:后面如果有比3还大的就交换
7,3,1,4,9—-》9,3,1,4,7
经过第一轮我们就找到了最大值
第二轮将第二个数作为最大值:3
9,3,1,4,7–》9,4,1,3,7—》9,7,1,3,4
经过第二轮我们就找到了第二大的
下面我们将第三个作为最大值1
9,7,1,3,4—》9,7,3,1,4—》9,7,4,1,3
那么下面我们用代码实现】
通过第一轮我们可以看到已经选出了最大值,并且放在最后面,那么下面我们只需要遍历前面7个数就行了,然后再将第二个数8作为最大值,依次遍历,那么内层循环每次就应该少一次
那么同样的首先我们要了解什么是选择排序,选择排序就是每次选定第一个为最大值,或者最小值,如果我们要进行降序排列,那么我们就将第一个作为最大值,然后遍历整个数组,如果有比这个数还大的,就交换,然后继续遍历,那么第一轮下来我们就找到了最大的一个,那么我们将第二个作为最大值,然后依次遍历,
这里我们可以总结一下,其实选择和冒泡排序很像,冒泡是将最小的或最大的放在了最后一个,而选择排序是放在第一个
选择排序是从前到后排序,,,而冒泡是从后到前排序,
那么下面我们举个例子来说明
3,7,1,4,9降序排列
第一轮将第一个数作为最大值:后面如果有比3还大的就交换
7,3,1,4,9—-》9,3,1,4,7
经过第一轮我们就找到了最大值
第二轮将第二个数作为最大值:3
9,3,1,4,7–》9,4,1,3,7—》9,7,1,3,4
经过第二轮我们就找到了第二大的
下面我们将第三个作为最大值1
9,7,1,3,4—》9,7,3,1,4—》9,7,4,1,3
那么下面我们用代码实现】
//定义一个数组 int[] num = new int[]{2,3,4}; //利用选择排序降序排列 int max = num[0]; int temp; for(int i=1;i<num.length;i++){ if(max<num[i]){ temp=max; max=num[i]; num[i]=temp; } } for(int i=0;i<num.length;i++){ System.out.print(num[i]); }
//定义一个数组 int[] num = new int[]{2,3,4}; //利用选择排序降序排列 int max = num[ 4000 0]; //这里第一轮就错了 //不能将第一个数直接作为最大值 //而是将第一数的下标0作为最大值 //然后交换的是num[0]和num[i] //因为比如如果我max=num[0],然后和num[1]小,将max和num[1]交换 //但是num[0]还是2,然后num[1]变成了2,最后的结果是{2,2,3} //所以结果会变成2,2,3 //所以一定注意,再选择排序中交换的数组中的两个值,而这里的max或者min //只是我们当作最大值的下标 int temp; for(int i=1;i<num.length;i++){ if(max<num[i]){ temp=max; max=num[i]; num[i]=temp; } } for(int i=0;i<num.length;i++){ System.out.print(num[i]); }
//定义一个数组,进行升序排列 int[] num = new int[]{9,8,7,6,5,4,3,2}; for(int i:num){ System.out.print(i+" "); } System.out.println("\n"); //利用选择排序 //将第一个数作为最小值 //MinIndex=0 int MinIndex = 0; int temp; for(int i = 1;i<num.length;i++){ if(num[MinIndex]>num[i]){ temp = num[MinIndex]; num[MinIndex] = num[i]; num[i] = temp; MinIndex = i; } } for(int i:num){ System.out.print(i+" "); } 9 8 7 6 5 4 3 2 8 7 6 5 4 3 2 9
通过第一轮我们可以看到已经选出了最大值,并且放在最后面,那么下面我们只需要遍历前面7个数就行了,然后再将第二个数8作为最大值,依次遍历,那么内层循环每次就应该少一次
//定义一个数组,进行升序排列 int[] num = new int[]{5,4,3,2,1}; for(int i:num){ System.out.print(i+" "); } System.out.println("\n"); //利用选择排序 //将第一个数作为最小值 //MinIndex=0 //int MinIndex = 0; int temp; int count=0; for(int j=0;j<num.length-1;j++){ int MaxIndex = j; for(int i = j+1;i<num.length;i++){ if(num[MaxIndex]<num[i]){//如果有比最大值还大的就改变最大值的下标,继续向后遍历 MaxIndex = i; }else{ temp = num[MaxIndex];//如果下一个小于最大值,就互相交换,最后的目的就是将最大值放在最后面去 num[MaxIndex] = num[i]; num[i] = temp; //这里的交换不能放在if语句里面,是不满足if语句才交换,满足if语句直接改变最大值的下标就行了 } } count++; System.out.print("第"+count+"次: "); for(int i:num){ System.out.print(i+" "); } System.out.println("\n"); } for(int i:num){ System.out.print(i+" "); } 5 4 3 2 1 第1次: 1 5 4 3 2 第2次: 1 2 5 4 3 第3次: 1 2 3 5 4 第4次: 1 2 3 4 5 1 2 3 4 5 这里的外层循环只需要4次就行了,也就是最后一个不需要再进行比较了,我们同样可以将每次的比较结果打印出来,就可以知道了
相关文章推荐
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- java实现 冒泡排序 插入排序 选择排序
- java实现选择排序和冒泡排序
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- Java实现选择排序
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- Java实现数组排序总结篇(冒泡,选择,插入,希尔)
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- Java分别实现冒泡排序、插入排序、快速排序、选择排序、交换排序
- 算法导论Java实现-选择排序(习题2.2-2)
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,快速排序
- 排序算法复习(Java实现)(二): 插入,冒泡,选择,Shell,快速排序
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- java实现选择排序
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- java 实现 冒泡排序、选择排序、插入排序。
- java实现的选择排序
- java 实现 冒泡排序、选择排序、插入排序。
- Java 实现选择排序代码
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序