1.目的
这几天看别人的算法博客,发现有些人的代码存在错误。并且在搜索引擎上排名非常高,误导了很多人,所以自己写了这篇博客。
2.算法描述
二元选择排序是对简单选择排序的一种改进。简单选择排序就是从数据中选择出最小的值与第一个位置的数据交换,然后在剩下的数据中选择最小的值与第二个位置的数据交换以此类推。而二元选择排序就是在每次选出数据中的最大值与最小值分别和第一位和最后一位交换。
3.代码
/**
* time:2017年12月28日
* author:Triomphe
*/
#include <stdio.h> #include <stdlib.h>
//二元选择排序
void TwoSelectSort(int a[], int n){
int i,j,mintmp,maxtmp,max,min;
for(i=0;i<n/2;i++){
min=i,max=i; //先将最小值与最大值下标指向未排序的第一个数。
for(j=i+1;j<n-i;j++){
if(a[j]<a[min]){
min=j;
continue;
}
if(a[j]>a[max]){
max=j;
}
}
//设置mintmp,maxtmp来暂时存储数据,有些博客使用一个变量来交换最大值与最小值就会出错。
mintmp=a[min];
maxtmp=a[max];
a[min]=a[i];
a[max]=a[n-i-1];
a[i]=mintmp;
a[n-i-1]=maxtmp;
printArray(a,n);
printf("\n");
}
}
//输出数组
void printArray(int a[],int n){
int i;
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
}
int main() {
//定义的数组 int data[]={275,322,12,2,23,12,43,123,22,3,56,34,99,12,1232,3,14,45,22,22,11,44,74}; int n =sizeof(data)/sizeof(data[0]); TwoSelectSort(data,n); printArray(data,n); return 0; }
4.最终结果