1. 程式人生 > >排序演算法---選擇排序

排序演算法---選擇排序

參考網址:https://www.cnblogs.com/onepixel/articles/7674659.html 選擇排序(Selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 演算法描述: n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。具體演算法描述如下: 初始狀態:無序區為R[1…n],有序區為空; 第i趟排序(i=1,2,3…n-1)開始時,當前有序區和無序區分別為R[1…i-1]和R(i…n)。該趟排序從當前無序區中-選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1…i]和R[i+1…n)分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區; n-1趟結束,陣列有序化了。

程式碼如下:

using namespace std;
// 分類 -------------- 內部比較排序
// 資料結構 ---------- 陣列
// 最差時間複雜度 ---- O(n^2)
// 最優時間複雜度 ---- O(n^2)
// 平均時間複雜度 ---- O(n^2)
// 所需輔助空間 ------ O(1)
// 穩定性 ------------ 不穩定

void Swap(int arr[], int i, int j)
{
	int temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}
void SelectionSort(int arr[], int n)
{
	
	for (int i = 0; i < n-1; i++)
	{
		int min_index = i;
		for (int j = i + 1; j < n; j++)
		{
			if (arr[j] < arr[min_index])
			{
				min_index = j;
			}
		}
		Swap(arr, i, min_index);
	}
}

int main()
{
	int arr[] = { 5, 0, 2, 6, 9, 4, 1, 3, 8 };
	int n = sizeof(arr)/sizeof(int);
	SelectionSort(arr, n);
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << endl;
	}
	return 0;
}