算法描述
它的工作原理如下:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
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 }