排序演算法 簡單選擇排序演算法實現及分析

2021-08-15 17:24:55 字數 1714 閱讀 9730

簡單選擇排序(****** selection sort)就是通過n-1次關鍵字排序之間的比較,從n-i+1個記錄中選擇關鍵字最小的記錄,並和第i(1<=i<=n)記錄交換。這是一般書上的定義。實際上選擇排序,就是每一輪選者乙個最值出來,然後在剩下的資料中又選擇乙個最值出來,直到資料被選擇完畢。這就是所謂的簡單選擇排序演算法。

在下面**中,每一輪內迴圈完畢,記錄最值下標,然後和起始值進行比較,如果不一樣才交換值

記錄最值下標才是最好的選擇,以前在某些書上看到的,靠 ,直接在內層迴圈中交換值!這樣效率肯定打折扣

注意:內層迴圈的起始位置為i+1 喲!

//選擇排序 核心是記錄最值下標

void selectsort_up(int *arr, int length)

} if (i != index)}}

如果陣列中有n個資料,外層的

第1輪迴圈是arr[0] 和arr[1] ...arr[n-1] 進行比較,次數為n-1 次,arr[0]放最值。

第2輪迴圈是arr[1] 和 arr[2]...arr[n-1] 進行比較,次數為n-2次,arr[1]放第二個最值。

所以不難得出它的比較的次數是n-1 + n-2 + n-3 + ....1 = n*(n-1)/2 。

時間複雜度為 = n^2/2- n/2 = n^2 ,o(n^2)

#define _crt_secure_no_warnings

#include #include #include #define maxsize 10

//交換值

void swap(int* a, int* b)

//選擇排序 核心是記錄最值下標

void selectsort_up(int *arr, int length)

} if (i != index)

}}//選擇排序 核心是記錄最值下標

void selectsort_down(int *arr, int length)

} if (i != index)

}}//列印陣列元素

void printarr(int* arr, int length)

printf("\n");

return;

}int main(int argc, char *argv)

; //給每個元素設定乙個隨機值

for (int i = 0; i < maxsize; i++)

printf("排序前:\n");

printarr(arr, maxsize);

printf("公升序:\n");

selectsort_up(arr,maxsize);

printarr(arr, maxsize);

printf("降序:\n");

排序演算法 簡單選擇排序

簡單選擇排序是一種選擇排序。1.簡單選擇排序的定義 每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。2.簡單選擇排序的流程 例項 注 紅色數字是位置發生變化的數值。3.簡單選擇排序的 實現 public class selectsort 若min有變化,...

排序演算法 簡單選擇排序

簡單選擇排序法就是通過n i次關鍵字比較,找到最小的關鍵字下標,最後在替換n i下標和最小下標的值。簡單排序的思想和氣泡排序的思想的區別是氣泡排序是相鄰關鍵字兩兩比較,如果小,則直接替換,可能在一輪迴圈會進行多次值交換。而簡單選擇排序法是一輪迴圈找到最小關鍵字下標,最後進行最多一次替換。public...

排序 簡單選擇排序演算法

排序分析 待排陣列 arr 9 排後陣列 newarr 9 第一輪 算出newarr 0 該放哪個元素。把arr某個元素放到newarr 0 arr減去該元素。arr剩下元素依次與newarr 0 對比,誰小誰排newarr 0 結果 arr newarr 1 第二輪 算出newarr 1 該放哪個...