標籤:info oid tmp tar std class time 最小 引擎
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.最終結果
二元選擇排序