資料結構與演算法C++之選擇排序
阿新 • • 發佈:2018-11-14
本篇文章是使用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;
}
程式實現結果為: