c語言選擇排序 選擇排序法 C語言

2021-10-11 07:12:01 字數 2211 閱讀 9672

直接選擇排序的基本思想:n個記錄的直接選擇排序可經過 n-1 趟直接選擇排序得到有序結果。

初始狀態:無序區為 a[1...n],有序區為空。

第 1 趟排序:在無序區 a[1...n] 中選出最小的記錄a[k],將它與無序區的第 1 個記錄 a[1] 交換,使 a[1…1] 和 a[2...n] 分別變為記錄個數增加1的新有序區和記錄個數減少1 的新無序區。

第 i 趟排序:第 i 趟排序開始時,當前有序區和無序區分別為 a[1… i-1] 和 a[i.. n](1 ≤ i ≤ n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄a[k],將它與無序區的第1 個記錄a[i] 交換,使 a[1…i] 和 a[i+ 1...n] 分別變為記錄個數增加 1 的新有序區和記錄個數減少 1 的新無序區。

這樣,n個記錄的檔案的直接選擇排序可經過 n-1 趟直接選擇排序得到有序結果。直接選擇排序是不穩定的。

三角列表示本輪排序後的結果

#include #include   #define success0#define param_err-1 int getminpos(int * array, int low, int high)int i = 0;int minpos = low;int min = array[low]; /*千萬注意這裡是 <= high, 因為陣列的最後乙個是high (n-1)*/for(i = low; i <= high; i++)} return minpos;} int selectsort(int * array, int size) int i = 0, j = 0;int minpos = 0; /*當前無序區最小值的位置*/int temp = 0;#ifdef debugint k = 0;#endif for(i = 0; i < size; i++) #ifdef debugprintf("i = %d min = %d", i, temp);printf("[");/*有序區域*/for(k =0; k < i+1; k++)printf("] "); /*無序區域*/printf("[");for(k = i+1; k < size; k++)printf("]");printf("");#endif} return success;}  int main(int argc, char ** ar**);int i = 0; printf("before sort: ");for(i = 0; i < 10; i++)printf(""); selectsort(array, 10); printf("after sort: ");for(i = 0; i < 10; i++)printf("");return 0;}
gcc selectsort.c -ddebug

before sort:  7    3    5    8    0    9    1    2    4    6i = 0 min = 0[  0  ] [  3    5    8    7    9    1    2    4    6  ] i = 1 min = 1[  0    1  ] [  5    8    7    9    3    2    4    6  ] i = 2 min = 2[  0    1    2  ] [  8    7    9    3    5    4    6  ] i = 3 min = 3[  0    1    2    3  ] [  7    9    8    5    4    6  ] i = 4 min = 4[  0    1    2    3    4  ] [  9    8    5    7    6  ] i = 5 min = 5[  0    1    2    3    4    5  ] [  8    9    7    6  ] i = 6 min = 6[  0    1    2    3    4    5    6  ] [  9    7    8  ] i = 7 min = 7[  0    1    2    3    4    5    6    7  ] [  9    8  ] i = 8 min = 8[  0    1    2    3    4    5    6    7    8  ] [  9  ] i = 9 min = 8[  0    1    2    3    4    5    6    7    8    9  ]  after sort:  0    1    2    3    4    5    6    7    8    9

C語言 選擇排序

選擇排序 selection sort 是一種簡單直觀的 排序演算法 它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果...

c語言選擇排序

選擇排序 第一層迴圈從陣列第乙個元素到倒數第二個元素結束 即比較n 1趟 第二層迴圈元素項比第一層的基礎上增加且小於n 選擇排序是比較後前面固定,如果後面的元素比前面的元素大,就將後面的元素 賦給前面,大迴圈沒迴圈1次,就確定了陣列第乙個元素是最小的 include main for i 0 i 8...

c語言 選擇排序

選擇排序是一種基礎演算法,其方法也很簡單。核心思維就是選擇二字,比如在一組給定10個數字的陣列中。第一次選擇10個數字中最大的數字和最後乙個數字進行交換。第二次選擇前9個數字中最大的數字和倒數第二個數字進行交換。第三次選擇前8個數字中最大的數字和倒數第三個數字進行交換。以此類推,最後完成從小到大的排...