算法思想:
- 思想和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。其实选择排序可以看成冒泡排序的优化,因为其目的相同,只是选择排序只有在确定了最小数的前提下才进行交换,大大减少了交换的次数。
- 选择排序的时间复杂度为O(n^2)
- 选择排序不是稳定的排序算法,举例说明:序列58539,第一遍选择第1个元素“5”会和元素“3”交换,那么原序列中的两个相同元素“5”之间的前后相对顺序就发生了改变。
举例:
4,2,3,1,5
第一趟选择:1 4 2 3 5
第二趟选择:1 2 4 3 5
第三趟选择:1 2 3 4 5
第四趟选择:1 2 3 4 5
代码:
1 for (int j = 0; j <n-1;j++) { 2 for (int i = j+1; i < n; i++) { 3 int temp; 4 if (a[j] > a[i]) { 5 // change 6 temp = a[j]; 7 a[j] = a[i]; 8 a[i] = temp; 9 } 10 } 11 }