指针实现选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法,但又是新手程序猿需要掌握的算法。。。所以写下供参考

思路:(来自百度百科)

  ①初始状态:无序区为R[1..n],有序区为空。

 

  ②第1趟排序

 

  在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

 

  ……

 

  ③第i趟排序

 

  第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

 

  这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

 1 #include<iostream>
 2 using namespace std;
 3 void main()
 4 {
 5      
 6     int num[10] = {9,8,10,3,4,6,4,7,2,1};
 7     int *p=&num[0];
 8     cout<<"排序前:"<<endl;
 9     for (int m = 0;m < 10;m++)
10         {
11         cout<<num[m]<<" ";
12         }
13      
14      
15     for (int i = 0;i < 9;i++)
16         {
17             int pos = i;
18             for (int j = i+1;j < 10;j++)
19                 {
20                 if (*(p+pos) > *(p+j))
21                     {
22                         pos = j;
23                     }
24                 }
25             int tem;
26             tem = *(p+pos) ;
27             *(p+pos)  =*(p+i);
28             *(p+i) = tem;
29         }
30      
31     cout<<endl<<"排序后:"<<endl;
32     for (int m = 0;m < 10;m++)
33         {
34             cout<<num[m]<<" ";
35         }
36 }

 

 

转载于:https://www.cnblogs.com/lousest/archive/2012/11/20/2778730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值