C++排序算法實現

選擇排序

#include <iostream>
using namespace std;
int a[100];
void Select_Sort(int a[], int n) {
	int k,t=0;
	for (int i = 0; i < n - 1; i++) {
		k = i;
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[k])k = j;//找到數值最小的下標
	    t = a[k]; a[k] = a[i]; a[i] = t;
	}
}
int main() {
	int n, t;
	cin >> n;
	for (int p = 0; p < n; p++)
		cin >> a[p];
	Select_Sort(a, n);
	for (int k = 0; k < n; k++)
		cout << a[k] << " ";
	return 0;
}

冒泡排序

#include <iostream>
using namespace std;
int a[100];
void Bubble_Sort(int a[], int n) {
	int t;
	bool flag = 1;//優化
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < n - i; j++)//每次冒泡的比較次數
			if (a[j + 1] < a[j]) {
				t = a[j + 1]; a[j + 1] = a[j]; a[j] = t;
				flag = 0;
			}//<則升序排列,>則降序排列
		if (flag)break;
	}//有多少個數就需
}
int main() {
	int n;
	cin >> n;
	for (int p = 0; p < n; p++)
		cin >> a[p];
	Bubble_Sort(a, n);
	for (int k = 0; k < n; k++)
		cout << a[k] << " ";
	return 0;
}

快速排序

int a[101] = { 0 };
void quicksort(int left, int right)
{
	int i, j, t, temp;
	if (left > right)
		return;
	temp = a[left];  //temp中存的就是基準數
	i = left;
	j = right;
	while (i != j)
	{
		//順序很重要,要先從右往左找
		while (a[j] >= temp && i < j)
			j--;
		//再從左往右
		while (a[i] <= temp && i < j)
			i++;
		//交換兩個數在數組中的位置
		if (i < j) //當i和j沒有相遇時
		{
			t = a[i];
			a[j] = a[i];
			a[j] = t;
		}
	}
	//最終將基準數歸位
	a[left] = a[i];
	a[i] = temp;
	quicksort(left, i - 1);  //繼續處理左邊的,這裏是一個遞歸的過程
	quicksort(i + 1, right);  //繼續處理右邊的,這裏是一個遞歸的過程
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章