排序-选择排序
选择排序的过程如下:
- 假设第1个元素为最小元素。
- 从第2个元素开始,依次遍历数组每个元素并和第一个元素比较,如果比第一个元素小,则置换位置,这一轮遍历下来,会找出最小元素并放在第1个位置上。
- 重复第一步,假设第2个元素为次小的元素,并执行第二步,从第3个元素开始遍历。
用代码写出来结果就是:
1 #include <iostream> 2 3 using namespace std; 4 5 void change(int *p,int pos1,int pos2); 6 void selectSort(int *p,int length); 7 void print(int *p,int length); 8 9 int main() 10 { 11 int p[] = {2,5,3,11,89,76,24,33,15}; 12 selectSort(p,sizeof(p)/sizeof(int)); 13 print(p,sizeof(p)/sizeof(int)); 14 cout << "Hello world!" << endl; 15 return 0; 16 } 17 18 void print(int *p,int length) 19 { 20 for(int i=0;i<length;i++) 21 cout << p[i] << endl; 22 } 23 24 void selectSort(int *p,int length) 25 { 26 for(int i=0;i<length;i++) 27 { 28 int min = i; 29 for(int j=i+1;j<length;j++) 30 { 31 if(p[j]<p[min]) 32 { 33 min=j; 34 } 35 change(p,min,i); 36 } 37 } 38 } 39 40 void change(int *p,int pos1,int pos2) 41 { 42 if(pos1 == pos2) 43 { 44 return; 45 } 46 int temp=p[pos1]; 47 p[pos1] = p[pos2]; 48 p[pos2] = temp; 49 }
性能分析:
- 每个位置的元素都会进行一次交换,所以一共需要N次交换。
- 每个位置的元素都需要N-1-i次比较,所以一共需要 1+2+3+.....+ (N-2)+(N-1) 次比较。约等于 N*N/2次。