码迷,mamicode.com
首页 > 编程语言 > 详细

经典排序之选择排序

时间:2017-12-17 20:57:48      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:元素   复杂度   selection   demo   imp   cti   body   ring   main   

选择排序(SelectionSort)的算法思想:对于n个待排序的数组,进行n-1次排序,每次选出待排序数据集中的最小数(或最大数),然后将选出的最小数(或最大数)与当前待排序数据集的首个数交换;以此类推,直到排序结束,整个待排序数组也成为有序数组。

 之所以称为选择排序,意为每次选出最小或最大的数,从而完成排序。

我接下来通过 代码演示:

/**
 * 选择排序
 * @author 李章勇
 */
import java.util.Arrays;
public class Demo1 {
static int num=0;
static void selectSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
int k=i;//把数组最左侧的角标赋给k
for(int j=k+1;j<arr.length;j++){
if(arr[j]<arr[k]){//升序排列,如果发现有比arr[k]小的元素,则存下该元素所在的角标
k=j;
}
}
if(i!=k){//如果存在比arr[i]更小的元素,则将该元素与arr[i]交换位置,依次类推,完成数组升序排列
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
System.out.println("第 "+(++num)+" 次:"+Arrays.toString(arr));
}
}
}
public static void main(String[] args) {
int[] arr={15,23,8,4,6,9,19};
System.out.println("排序前:"+Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后:"+Arrays.toString(arr));
}
}

上述代码运行后的结果:  

排序前:[15, 23, 8, 4, 6, 9, 19]
第 1 次:[4, 23, 8, 15, 6, 9, 19]
第 2 次:[4, 6, 8, 15, 23, 9, 19]
第 3 次:[4, 6, 8, 9, 23, 15, 19]
第 4 次:[4, 6, 8, 9, 15, 23, 19]
第 5 次:[4, 6, 8, 9, 15, 19, 23]
排序后:[4, 6, 8, 9, 15, 19, 23]

最后,选择排序的平均时间复杂度为O(n2),在稳定性方面是不稳定的。

【注:关于排序中的稳定性,请参考本博中的“经典排序之插入排序”文章】

经典排序之选择排序

标签:元素   复杂度   selection   demo   imp   cti   body   ring   main   

原文地址:http://www.cnblogs.com/lizhangyong/p/8052898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!