二元選擇排序

來源:互聯網
上載者:User

標籤: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.最終結果

 

二元選擇排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.