1. 程式人生 > >排序——選擇排序(C++實現)

排序——選擇排序(C++實現)

選擇排序中兩個重要的排序方法:簡單選擇排序堆排序

選擇排序的基本思想是:每一趟(例如第i趟)在後面n-i+1(i=1,2,...,n-1)個待排序元素中選取關鍵字最小的元素,作為有序子序列的第i個元素,知道第n-1趟做完,待排序元素只剩下1個,就不用再選了。

簡單選擇排序

簡單選擇的程式碼:

#include <iostream>

using namespace std;

void SelectSort(int a[], int n)
{
	for (int i = 0; i < n - 1; ++i)//一共進行n-1趟
	{
		int index = i;//記錄最小元素位置
		for (int j = i + 1; j < n; ++j)//在a[i...n-1]中選擇最小的元素
		{
			if (a[index] > a[j])
			{
				index = j;//更新最小元素位置
			}
		}
		if (index != i)
		{
			swap(a[i], a[index]);//與第i個位置交換
		}
	}
}

int main()
{
	int a[10] = {0, 4, 2, 9, 7, 1, 6, 3, 5, 8};
	SelectSort(a, 10);
	for (int i = 0; i < 10; ++i)
	{
		cout << a[i] << "  ";
	}
	return 0;
}

簡單選擇排序演算法的效能分析如下

空間複雜度:O(1)

時間效率:簡單選擇排序過程中,元素移動的操作次數很少,不會超過3(n-1)次(一次swap需要3次元素移動),最好的情況下是移動0次,此時對應的表已經有序;但元素間的比較的次數與序列的初始狀態無關,始終是n(n-)/2次,所以時間複雜度始終為O(n^2)

穩定性:不穩定。