c++ 八大排序算法

#include <iostream>
using namespace std;

void output(int a[], int n) {
	for (int i = 0; i < n; ++i) {
		cout << a[i] << " ";
	}
	cout << endl;
}

void bubble(int a[], int n) {
	for (int i = 0; i < n; ++i) {
		for (int j = i + 1; j < n; ++j) {
			if (a[i] > a[j]) {
				swap(a[i], a[j]);
			}
		}
	}
}

int partition(int a[], int left, int right) {
	int pivot = a[left];
	int l = left, r = right;
	while (l < r) {
		while (l < r && a[r] > pivot) r--;
		if (l < r) a[l++] = a[r];
		while (l < r && a[l] < pivot) l++;
		if (l < r) a[r--] = a[l];
	}
	a[l] = pivot;
	return l;
}

void quicksort(int a[], int l, int r) {
	if (l < r) {
		int pivot = partition(a, l, r);
		partition(a, l, pivot - 1);
		partition(a, pivot + 1, r);
	}	
}

void down(int a[], int i, int n) {
	int parent = i;
	int child = i * 2;
	while (child + 1 < n && a[child + 1] > a[child]) {
		child += 1;
	}
	while (child < n && a[child] > a[parent]) {
		swap(a[child], a[parent]);
		parent = child;
	}
	child = child * 2 + 1;
} 

void buildheap(int a[], int n) {
	for (int i = n / 2; i >= 0; i--) {
		down(a, i, n);
	}
}

void heapsort(int a[], int n) {
	buildheap(a, n);
	for (int i = n - 1; i > 0; i--) {
		swap(a[i], a[0]);
		buildheap(a, i);
	}
}

void insertsort(int a[], int n) {
	for (int i = 1; i < n; i++) {
		int num = a[i];
		int j = i - 1;
		while (num < a[j]) {
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = num;
	}
}

void selectsort(int a[], int n) {
	for (int i = 0; i < n; i++) {
		int index = i;
		for (int j = i + 1; j < n; j++) {
			if (a[j] < a[index]) {
				index = j;
			}
		}
		swap(a[i], a[index]);
	}
}

void merge(int a[], int l, int m, int r) {
	int i = l, j = m + 1, k = 0;
	int len = r - l + 1;
	int *s = new int[len]; 
	
	while(i <= m && j <= r) {
		if (a[i] <= a[j]) s[k++] = a[i++];
		else s[k++] = a[j++];
	}
	while (i <= m) s[k++] = a[i++];
	while (j <= r) s[k++] = a[j++]; 
	for (i = l, k = 0; i <= r;i++, k++) {
		a[i] = s[k];
	}
}

void mergesort(int a[], int l, int r) {
	if (l < r) {
		int m = (l + r) / 2;
		mergesort(a, l, m);
		mergesort(a, m + 1, r);
		merge(a, l, m, r);
	}
}

void shell(int a[], int dk, int n) {
	for (int i = dk; i < n; i++) {
		int j = i - dk;
		int num = a[i];
		while (num < a[j]) {
		 a[j + dk] = a[j];
		 j -= dk;
		}
		a[j + dk] = num;
	}
}

void shellsort(int a[], int n) {
	int dk = n / 2;
	while (dk) {
		shell(a, dk, n);
		dk /= 2;
	} 
}

void bucketsort(int a[], int n) {
	int bucket[105] = {0};
	for (int i = 0; i < n; i++) {
		bucket[a[i]]++;
	}
	for (int j = 0, i = 0; j < 105; j++) {
		while (bucket[j]) {
			a[i++] = j;
			bucket[j]--;
		}
	}
}

int main() {
	cout << "请输入待排序个数:" << endl;
	int n;
	cin >> n;
	cout << "请输入待排序数字: " << endl;
	int a[105] = {0};
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}
//	cout << "1.冒泡排序:" << endl;
//	bubble(a, n);
//	output(a, n);
//	cout << "2.快速排序:" << endl;
//	quicksort(a, 0, n - 1);
//	output(a, n);
//	cout << "3.堆排序:" << endl;
//	heapsort(a, n);
//	output(a, n);
//	cout << "4.插入排序:" << endl;
//	insertsort(a, n);
//	output(a, n);
//	cout << "5.选择排序:" << endl;
//	selectsort(a, n);
//	output(a, n);
//	cout << "6.归并排序:" << endl;
//	mergesort(a, 0, n - 1);
//	output(a, n);
//	cout << "7.希尔排序:" << endl;
//	shellsort(a, n);
//	output(a, n);
//	cout << "8.桶排序:" << endl;
//	bucketsort(a, n);
//	output(a, n);		
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值