Sam大叔
"if you ever want something badly,let it go.if it comes back to you,then it's yours forever.if it doesn't,then it was never yours to begin with."

导航

 

算法描述

它的工作原理如下:

    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,

    然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

    以此类推,直到所有元素均排序完毕。


 1 //
 2 //  s_select.cpp
 3 //
 4 //  Created by scandy_yuan on 12-12-27.
 5 //  Copyright (c) 2012年 Sam. All rights reserved.
 6 //
 7 
 8 
 9 
10 #include <iostream>
11 using namespace std;
12 
13 void s_swap(int * a,int * b)
14 {
15     int  c = *a;
16     *a = *b;
17     *b = c;
18 }
19 //选择排序算法实现函数
20 void s_select(int  data[] ,size_t size)
21 {
22     size_t i,j;
23     //保存最小的数
24     int min;
25     for (i=0;i<size-1; i++) {
26         //假设data[i]为最小的数
27         min = data[i];
28         //通过循环获取数组中剩余数中的最小数
29         for(j=i+1;j<size;j++){
30             if(min > data[j])
31                 s_swap(&min,&data[j]);
32         }
33         //将最小的数放到正确的位置
34         if(data[i]!=min){
35             s_swap(&data[i],&min);
36             
37             cout << "" << i+1 << "次排序后的结果:" ;
38         
39             for(size_t k=0;k<size;k++)
40                 cout << data[k] << "\t";
41             cout << endl;
42         }else{
43             cout << "" << i+1 << "排序的位置不变,不发生交换!" << endl;
44         }
45     }
46 }
47 
48 int main(int argc, const char * argv[])
49 
50 {
51     // insert code here...
52     //测试
53     int arr[5] = {2,1,5,4,3};
54     s_select(arr, 5);
55     return 0;
56 }

 

 

posted on 2012-12-28 13:15  Sam大叔  阅读(269)  评论(0编辑  收藏  举报