【資料結構】選擇排序演算法樣本

來源:互聯網
上載者:User

標籤:iostream   變數   第一個   pad   main   數組   code   log   namespace   

基本選擇排序編輯排序演算法即解決以下問題的演算法:輸入n個數的序列<a1,a2,a3,...,an>。輸出原序列的一個重排<a1*,a2*,a3*,...,an*>;,使得a1*<=a2*<=a3*<=...<=an*排序演算法有很多,包括插入排序,冒泡排序,堆排序,歸併排序,選擇排序,計數排序,基數排序,桶排序,快速排序等。插入排序,堆排序,選擇排序,歸併排序和快速排序,冒泡排序都是比較排序,它們通過對數組中的元素進行比較來實現排序,其他排序演算法則是利用非比較的其他方法來獲得有關輸入數組的排序資訊。思想n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:①初始狀態:無序區為R[1..n],有序區為空白。②第1趟排序在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。……③第i趟排序第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。通俗的解釋對比數組中前一個元素跟後一個元素的大小,如果後面的元素比前面的元素小則用一個變數k來記住他的位置,接著第二次比較,前面“後一個元素”現變成了“前一個元素”,繼續跟他的“後一個元素”進行比較如果後面的元素比他要小則用變數k記住它在數組中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第一個元素的下標,就讓第一個元素跟他交換一下值,這樣就找到整個數組中最小的數了。然後找到數組中第二小的數,讓他跟數組中第二個元素交換一下值,以此類推。代碼實現:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 #include<iostream>#include<cstdio>#include<cstdlib>#include<ctime>#define SIZE 15using namespace std;void selectSort(int *a, int len){    int h;    int tmp;    for(int i=0; i<SIZE-1; i++){        int k=i;        for(int j=i+1; j<len; j++){            if(a[j]<a[k])            k=j;        }        if(k!=i){            tmp=a[i];            a[i]=a[k];            a[k]=tmp;        }        cout<<"第"<<i<<"步排序結果為:";        for(int h=0; h<len ; h++){            cout<<a[h]<<" ";        }        cout<<endl;    }}int main(){    int array[SIZE];    srand(time(NULL));    for(int i=0 ;i<SIZE; i++){        array[i]=rand()/1000+100;    }      cout<<"排序前的序列為:"<<endl;    for(int i=0; i<SIZE; i++){        cout<<array[i]<<" ";    }    cout<<endl<<endl;    selectSort(array, SIZE);    cout<<endl;    cout<<"排序後的序列為:"<<endl;    for(int i=0; i<SIZE; i++){        cout<<array[i]<<" ";    }    return 0;}

 

運行結果:

【資料結構】選擇排序演算法樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.