排序算法:简单选择排序算法实现及分析
生活随笔
收集整理的這篇文章主要介紹了
排序算法:简单选择排序算法实现及分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單選擇排序算法介紹
簡單選擇排序(Simple Selection Sort)就是通過n-1次關鍵字排序之間的比較,從n-i+1個記錄中選擇關鍵字最小的記錄,并和第i(1<=i<=n)記錄交換。這是一般書上的定義。實際上選擇排序,就是每一輪選者一個最值出來,然后在剩下的數據中又選擇一個最值出來,直到數據被選擇完畢。這就是所謂的簡單選擇排序算法。
簡單選擇排序算法實現
在下面代碼中,每一輪內循環完畢,記錄最值下標,然后和起始值進行比較,如果不一樣才交換值。
記錄最值下標才是最好的選擇,以前在某些書上看到的,靠 ,直接在內層循環中交換值!這樣效率肯定打折扣。
注意:內層循環的起始位置為i+1 喲!?
//選擇排序 核心是記錄最值下標 void SelectSort_Up(int *arr, int length) {for (int i = 0; i < length-1; i++){int index = i;//記錄最值下標for (int j = i + 1; j < length; j++){//升序if (arr[index] > arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[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 <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 10//交換值 void Swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp; }//選擇排序 核心是記錄最值下標 void SelectSort_Up(int *arr, int length) {for (int i = 0; i < length-1; i++){int index = i;//記錄最值下標for (int j = i + 1; j < length; j++){//升序if (arr[index] > arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[index]);}} } //選擇排序 核心是記錄最值下標 void SelectSort_Down(int *arr, int length) {for (int i = 0; i < length - 1; i++){int index = i;//記錄最值下標for (int j = i + 1; j < length; j++){//降序if (arr[index] < arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[index]);}} } //打印數組元素 void PrintArr(int* arr, int length) {for (int i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");return; }int main(int argc, char *argv[]) {srand((size_t)time(NULL));//設置隨機種子int arr[MAXSIZE] = { 0 };//給每個元素設置一個隨機值for (int i = 0; i < MAXSIZE; i++){arr[i] = rand() % 11;}printf("排序前:\n");PrintArr(arr, MAXSIZE);printf("升序:\n");SelectSort_Up(arr,MAXSIZE);PrintArr(arr, MAXSIZE);printf("降序:\n");SelectSort_Down(arr, MAXSIZE);PrintArr(arr, MAXSIZE);return 0; }運行結果檢測
總結
以上是生活随笔為你收集整理的排序算法:简单选择排序算法实现及分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT TextEdit设置背景、明文加密
- 下一篇: QT 显示中文、解决发布乱码、获得系统特