日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

选择排序—简单选择排序(Simple Selection Sort)

發布時間:2025/5/22 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 选择排序—简单选择排序(Simple Selection Sort) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本思想:

在要排序的一組數中,選出最小(或者最大)的個數與第1個位置的數交換;然后在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最后個數)比較為止。

簡單選擇排序的示例:

?

操作方法:

第一趟,從n 個記錄中找出關鍵碼最小的記錄與第一個記錄交換

第二趟,從第二個記錄開始的n-1 個記錄中再選出關鍵碼最小的記錄與第二個記錄交換

以此類推.....

第i 趟,則從第i 個記錄開始的n-i+1 個記錄中選出關鍵碼最小的記錄與第i 個記錄交換,

直到整個序列按關鍵碼有序。


算法實現:

?? void print(int a[], int n ,int i){cout<<"第"<<i+1 <<"趟 : ";for(int j= 0; j<8; j++){cout<<a[j] <<" ";}cout<<endl; } /*** 數組的最小值** @return int 數組的鍵值*/ int SelectMinKey(int a[], int n, int i) {int k = i;for(int j=i+1 ;j< n; ++j) {if(a[k] > a[j]) k = j;}return k; }/*** 選擇排序**/ void selectSort(int a[], int n){int key, tmp;for(int i = 0; i< n; ++i) {key = SelectMinKey(a, n,i); //選擇最小的元素 遞歸if(key != i){tmp = a[i]; a[i] = a[key]; a[key] = tmp; //最小元素與第i位置元素互換}print(a, n , i);} } int main(){int a[8] = {3,1,5,7,2,4,9,6};cout<<"初始值:";for(int j= 0; j<8; j++){cout<<a[j] <<" ";}cout<<endl<<endl;selectSort(a, 8);print(a,8,8); }

?

?簡單選擇排序的改進——二元選擇排序

簡單選擇排序,每趟循環只能確定一個元素排序后的定位。我們可以考慮改進為每趟循環確定兩個元素(當前趟最大和最小記錄)的位置,從而減少排序所需的循環次數。改進后對n個數據進行排序,最多只需進行[n/2]趟循環即可。具體實現如下

void SelectSort(int r[],int n) { 02. int i ,j , min ,max, tmp; 03. for (i=1 ;i <= n/2;i++) { 04. // 做不超過n/2趟選擇排序 05. min = i; max = i ; //分別記錄最大和最小關鍵字記錄位置 06. for (j= i+1; j<= n-i; j++) { 07. if (r[j] > r[max]) { 08. max = j ; continue ; //continue不可少,否則可能會漏掉一些數據,min的值偏大 09. } 10. if (r[j]< r[min]) { 11. min = j ; 12. } 13. } 14. //該交換操作還可分情況討論以提高效率 15. tmp = r[i-1]; r[i-1] = r[min]; r[min] = tmp; 16. tmp = r[n-i]; r[n-i] = r[max]; r[max] = tmp; 17. 18. } 19.}

  

總結

以上是生活随笔為你收集整理的选择排序—简单选择排序(Simple Selection Sort)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。