继续排序吧,一直到底。接下来该选择排序了。
原理:
将数组分为两部分,已经排好序的,和未排好序的,假设是从小到大排序,左边为未排好序的,右边为排好序的。
如,对于数组 s[] = { 3, 1, 8, 5, 9, 4, 2, 6, 7, 10 };来说
(1)扫描一遍数组,从中选择一个最大的元素 //此时选中的是10
(2)将该最大的元素与数组中未排好序的部门的末尾元素交换位置 //第一遍时,将10 和 10 交换,
(3)循环上述操作即可 // 执行一遍后,数组 s[] = { 3, 1, 8, 5, 9, 4, 2, 6, 7, 10 },其中未排好序的为下划线部分,已排好序的为10。
代码如下:
1 void Select_Sort(long *p, int n) 2 { 3 for (long i = 0; i < n; i++) 4 { 5 long k = 0, j; 6 for ( j = 0; j < n - i; j++) 7 { 8 if (p[k] < p[j]) 9 { 10 k = j; 11 } 12 } 13 long temp = p[k]; 14 p[k] = p[j - 1]; 15 p[j - 1] = temp; 16 } 17 }
主函数测试代码:
1 int main() 2 { 3 long s[] = { 3, 1, 8, 5, 9, 4, 2, 6, 7, 10 }; 4 Select_Sort(s, 10); 5 for (long i = 0; i < 10; i++) cout << s[i] << ends << ends; 6 return 0; 7 }
实验截图: