数据结构——5种排序算法c++

1.直接插入排序Insert sort

2.折半插入排序Binary insert sort

3.希尔排序Bell sort

4.快速排序Quick sort

5.直接选择排序Select sort

#include<iostream>
#include<algorithm>
using namespace std;
int a[100], l = 0, r = -1;

void mpsort(int* s, int left, int right) {//冒泡排序
	for (int i = left+1; i < right; i++) {//选出最小的排在第i-1个
		for (int j = right - 1; j >= i; j--) {
			if (s[j] < s[j - 1])swap(s[j], s[j - 1]);
		}
	}
}

void Insertsort1(int* s, int left, int right) {//直接插入排序1
	for (int i = left + 1; i <= right; i++) {
		if (s[i] < s[i - 1]) {
			int t = s[i], j = i - 1;
			do {
				s[j + 1] = s[j], j--;
			} while (j >= left && s[j] > t);
			s[j + 1] = t;
		}
	}
}
void Insertsort2(int* s, int left, int right) {//直接插入排序2
	for (int i = left + 1; i <= right; i++) {
		if (s[i] < s[i - 1]) {
			int t = s[i], j = i - 1;
			for (j; j >= left && s[j] > t; j--) {
				s[j + 1] = s[j];
			}s[j + 1] = t;
		}
	}
}

void Binaryinsertsort(int* s, int left, int right) {//折半插入排序
	for (int i = left + 1; i <= right; i++) {
		int t = s[i], low = left, high = i - 1;
		while (low <= high) {
			int middle = (low + high) / 2;
			if (t < s[middle])high = middle - 1;
			else low = middle + 1;
		}for (int j = i - 1; j >= low; j--) {
			s[j + 1] = s[j];
		}s[low] = t;
	}
}

void Shellsort(int* s, int left, int right) {//希尔排序
	int gap = right - left + 1;
	while (gap > 1) {
		gap = gap / 3 + 1;
	    for (int i = left + gap; i <= right; i++) {
			if (s[i] < s[i - gap]) {
				int t = s[i], j = i - gap;
				for (j; j >= left&&s[j]>t; j-=gap) {
					s[j + gap] = s[j];
				}s[j + gap] = t;
			}
	    }
	}
}

int Partition(const int low, const int high) {
	int pivot = a[low], pivotpos = low;
	for (int i = low + 1; i <= high; i++) {
		if (a[i] < pivot) {
			pivotpos++;
			if(i!=pivotpos)swap(a[pivotpos], a[i]);
		}
	}a[low] = a[pivotpos], a[pivotpos] = pivot;
	return pivotpos;
}void Quicksort(int* s, int left, int right) {//快速排序
	if (left < right) {
		int pivotpos = Partition(left, right);
		Quicksort(s, left, pivotpos - 1);
		Quicksort(s, pivotpos + 1, right);
	}
}

void Selectsort(int* s, int left, int right) {//选择排序
	for (int i = left; i < right; i++) {
		int ani = i;
		for (int j = i + 1; j <= right; j++) {
			if (a[j] < a[ani])ani = j;
		}if (ani != i)swap(a[ani], a[i]);
	}
}

int main() {
	int n;
	scanf_s("%d", &n);
	while (r < n-1) {
		scanf_s("%d", &a[++r]);
	}
	mpsort(a, l, r);
	//Insertsort1(a, l, r);
	//Insertsort2(a, l, r);
	//Binaryinsertsort(a, l, r);
	//Shellsort(a, l, r);
	//Quicksort(a, l, r);
	//Selectsort(a, l, r);
	for (int i = 0; i < n; i++)printf("%d ", a[i]);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值