数据结构各类型排序算法c/c++代码实例

3 篇文章 0 订阅
2 篇文章 0 订阅

插入排序 

for (n = 0; n < a; n++) {
	for (m = n; m > 0; m--) {
		if (num[m] < num[m-1]) {
			num[m] = num[m] ^ num[m-1];
			num[m-1] = num[m] ^ num[m-1];
			num[m] = num[m] ^ num[m-1];
		}
	}
}

堆排序

void swap(int arr[],int a,int b)
{
	int tem = arr[a];
	arr[a] = arr[b];
	arr[b] = tem;
}

void heapInsert(int arr[],int i)
{
	while (arr[i] > arr[(i - 1) / 2]) {
		swap(arr, i, (i - 1) / 2);
		i = (i - 1) / 2;
	}
}

void heapify(int arr[],int index, int heapsize)
{
	int left = index * 2 + 1;
	while (heapsize > left)
	{
		int big = left + 1 < heapsize && arr[left] < arr[left + 1] ? left + 1 : left;
		big = arr[big] > arr[index] ? big : index;
		if (big == index) {
			break;
		}
		swap(arr, big, index);
		index = big;
		left = index * 2 + 1;
	}
}

void process(int arr[],int n) 
{
	for (int i = 0; i < n+1; i++) {
		heapInsert(arr, i);
	}
	int heapsize = n;
	swap(arr, 0, heapsize--);
	while (heapsize > 0) {
		heapify(arr, 0, heapsize+1);

归并排序

void process(int arr[], int reg[], int start, int end) {
	if (start >= end)return;
	int mid = start + ((end - start) >> 1);
	process(arr, reg, start, mid);
	process(arr, reg, mid + 1, end);
	int k = start, j = start, l = mid + 1;
	while (k <= mid && l <= end) {
		reg[j++] = arr[k] < arr[l] ? arr[k++] : arr[l++];
	}
	while (k <= mid) {
		reg[j++] = arr[k++];
	}
	while (l <= end) {
		reg[j++] = arr[l++];
	}
	for (k = start; k <= end; k++) {
		arr[k] = reg[k];
	}
	return;
}

快速排序

void process(int arr[], int p, int d) {
int a = p, b = d;
if (a >= b)return;
	while (a < b){
		while (arr[a] <= arr[p] && a <= b) a++;
		while (arr[b] >= arr[p] && a <= b) b--;
		if (a < b) {
			arr[a] = arr[a] ^ arr[b];
			arr[b] = arr[a] ^ arr[b];
			arr[a] = arr[a] ^ arr[b];
		}
	}
	if (p != b) {
		arr[p] = arr[p] ^ arr[b];
		arr[b] = arr[p] ^ arr[b];
		arr[p] = arr[p] ^ arr[b];
	}
	process(arr, p, b - 1);
	process(arr, b + 1, d);
	return;
}

冒泡排序

for (n = 0; n < a; n++) {
	for (m = 0, b = a-1; m < b; m++, b--) {
		if (num[m] > num[m + 1]) {
			num[m]=num[m] ^ num[m+1];
num[m+1]=num[m]^num[m+1];
num[m]=num[m]^num[m+1];
		}
	}
}

选择排序

for (n = 0; n < a; n++) {
	int min = n;
	for (m = n; m < a; m++) {
		if (num[m] < num[min]) {
			min = m;
		}
	}
	if (n != min) {
		num[n] = num[n] ^ num[min];
num[min] = num[n] ^ num[min];
num[n] = num[n] ^ num[min];
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值