選擇排序-初步探索
阿新 • • 發佈:2018-12-09
本篇部落格主要初探選擇排序。我們以前接觸過“在一組數中,如何找出最大的那個數字?”思路就是先預設第一個數字最大,然後遍歷之後的數字,將其與max比較大小,不斷更新max,最後迴圈結束,max的值就是最大數字or最大數字的下標。
本章的“選擇排序”也是這個思路,只不過多了層迴圈的邏輯(假設要求升序排練):每次迴圈都要找出陣列中的最大的那個數字,將其與陣列中的最後一個數字交換,這樣每次都能把一個最大的數歸位;每歸位一個數字,陣列的檢查範圍就縮小一個長度,直至所有數字歸位。圖解如下:
程式碼:
#include<stdio.h> #include<stdlib.h> int max(int a[], int len) { int maxid = 0; //找出最大值所在的下標 for (int i = 1; i < len; i++) { if (a[i]>a[maxid]) { maxid = i; } } return maxid; } int main() { int a[] = { 5, 4, 3, 2, 1 }; int len = sizeof(a) / sizeof(a[0]); for (int i = len - 1; i > 0; i--) { //找出最大數的下標 int maxid = max(a, i+1);//這裡注意每一次排好一位後陣列檢測範圍都要縮小一個 int tmp; //交換,把最大值放在末尾 tmp = a[maxid]; a[maxid] = a[i]; a[i] = tmp; } //列印 for (int i = 0; i < len; i++) { printf("%d ", a[i]); } system("pause"); return 0; }
排序結果: