下面就来介绍选择排序及其优化的部分代码
简单选择排序思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数中再找最小(或者最大)的与第2个位置的数交换,以此类推,知道第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
下边的选择排序算法是从小到大的顺序排序:
int selection(ElemType A[],int n){
//对A数组进行简单选择排序
for(int i=0;i<n;i++){
int min=A[0];
for(int j=i+1;j<n;j++){
if(A[j]<min)
min=A[j];
}
if(min!=j)
swap(A[i],min);
}
}
对上述排序进行优化
优化思想:先找出最大或者最小的数记录,并且用m的去统计已经排序好几个数
int Max(ElemType A[],int n, int &m){
int pos=0;
//得出最大数位置
for(int i=1;i<n;i++){
if(A[i]>A[pos){
pos=i;
m++;
}
}
}
void selectionModified(ElemType A[],int n){
int m=0;
for(int size=n;size>1;size--){
int j=Max(A,size,m);
//找出最大位置和最后一个数交换
swap(A[j],A[size-1]);
//判断排序结束标志
if(m==size-1)
break;
}
}