选择排序
所谓选择排序,就是从头到尾逐个确定元素的过程,比如: 3 1 4 5,现在我要对他进行升序排序,最后结果也就是:1 3 4 5.
先确定第一个位置:也就是3 1 4 5中的3,把这个3先按住不动,然后后面的依次和它比较,如果比他小就交换.
void sort(int *p,int *q) { *p^=*q; *q^=*p; *p^=*q; } void selectsort(int* p,int n) { for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(p[idx]>p[j]) { sort(&p[idx],&p[i]); } } } }
对于此代码,仔细分析可以看出,其中的多趟比较可能是没有必要的,下面进行优化,还是上面的思路,按住3不动,然后后面的元素与3比较,但是此刻如果遇到比3小的不进行交换,只是先记录索引,直到最后一趟比较完毕才进行判断是否需要进行交换。
void sort(int *p,int *q) { *p^=*q; *q^=*p; *p^=*q; } void selectsort(int* p,int n) { int idx; for(int i=0;i<n-1;i++) { idx=i; for(int j=i+1;j<n;j++) { if(p[idx]>p[j]) { idx=j; } } if(idx!=i) { sort(&p[idx],&p[i]); } } }