栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1.直接插入排序Insert sort

2.折半插入排序Binary insert sort

3.希尔排序Bell sort

4.快速排序Quick sort

5.直接选择排序Select sort

#include
#include
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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979783.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号