在排序的家族中,选择排序算是最简单的一个了。
其思想(从小到大):
- 对给定的一组记录,经过第一轮比较,得到最小记录,然后将该记录与第一个记录的位置进行交换;
- 接下来对不包括第一个记录之外的记录进行第二轮比较,得到最小记录与第二个记录的位置进行交换;
- 以此类推,直至遍历所有记录。
示例:
初始化:{5,1,2,4,3}
第一轮:{1,5,2,4,3}
第二轮:{1,2,5,4,3}
第三轮:{1,2,3,4,5}
第四轮:{1,2,3,4,5}
第五轮:{1,2,3,4,5}
可以看到时间复杂度是Ο(n2),空间复杂度Ο(1),不稳定排序,n较小的时候性能较好。
java示例代码
public class Sort { public static void selectSort(int[] a){ int i, j, temp = 0, flag = 0, n = a.length; for (i = 0; i < n; i++) { temp = a[i]; flag = i; for (j = i+1; j < n; j++) { if (a[j]<temp ) { temp = a[j]; flag = j; } } if (flag != i) { a[flag] = a[i]; a[i] = temp; } } } public static void main(String[] args) { int a[] = {5,1,2,4,3}; selectSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } }