实习之路--点滴积累四_选择

继续排序吧,一直到底。接下来该选择排序了。

原理:

将数组分为两部分,已经排好序的,和未排好序的,假设是从小到大排序,左边为未排好序的,右边为排好序的。

如,对于数组 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 }

实验截图:

原文地址:https://www.cnblogs.com/casparzheng/p/4371976.html