1. 程式人生 > >資料結構與演算法C++之選擇排序

資料結構與演算法C++之選擇排序

本篇文章是使用C++實現的選擇排序演算法,演算法複雜度為O(n2)
選擇排序演算法初始時在序列中找到最小元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

如上圖陣列中有8個元素,首先將第一個元素1作為最小元素,然後遍歷後面的7個元素,遍歷完後如果發現有比1更小的元素,就將該元素與1互換;接下來將6作為最小元素,然後遍歷後面的6個元素,如果發現有比6更小的元素,就將該元素與6互換,以此類推,直到最後。
下面是C++實現:

#include <iostream>
#include
<ctime>
//time()函式 #include <cstdlib> //rand()函式 #include <cassert> //assert()函式 using namespace std; int* generateRandomArray(int n, int rangeL, int rangeR){//生成隨機陣列 assert(rangeL < rangeR); int *arr = new int[n]; srand(time(NULL));//生成隨機數種子 for (int i = 0; i < n; i++
){ arr[i] = rand() % (rangeR - rangeL + 1) + rangeL; } return arr; } template<typename T> void printArray(T arr[], int n){//列印陣列元素 for (int i = 0; i < n; i ++){ cout<<arr[i]<<" "; } cout<<endl; //換行 return; } template<typename T>
//定義模板型別,使對各種資料型別都適用,如double,float,string void SelectionSorting(T a[], int n){//選擇排序演算法 for (int i = 0; i < n; i++){ int minIndex = i; for (int j = i + 1; j < n; j++){ if (a[j] < a[minIndex]) minIndex = j; } swap(a[i], a[minIndex]); } } int main() { //int a[] = {10,9,8,7,6,5,4,3,2,1}; int n = 10; int *arr = generateRandomArray(n, 0, n); printArray(arr, n); SelectionSorting(arr, n); printArray(arr, n); delete[] arr;//最後刪除陣列開闢的空間 return 0; }

程式實現結果為:
在這裡插入圖片描述