数据结构 严蔚敏 八大排序

#include<iostream>

using namespace std;
void show(int* arr, int n) {
	for (int i = 0; i < n; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;
}
void insertSort(int arr[], int n) {
	int temp;
	for (int i = 1, j = 0; i < n; i++) {
		if (arr[i] < arr[i - 1]) {
			temp = arr[i];
			for (j = i; j>0&&arr[j-1] > temp; j--) {
				arr[j] = arr[j - 1];
			}
			arr[j] = temp;
		}
	}
}
void BinsertSort(int arr[], int n) {
	int low, high;
	for (int i = 1; i < n; i++) {
		if (arr[i] < arr[i - 1]) {
			low = 0;
			high = i-1;
			while (low < high) {
				if (arr[(low + high) / 2] < arr[i])low = (low + high) / 2 + 1;
				else high = (low + high) / 2;
			}
			int temp = arr[i];
			for (int j = i; j > high; --j) {
				arr[j] = arr[j - 1];
			}
			arr[high] = temp;
		}
	}
}
void shellSort(int arr[],int n) {
	for (int i = n / 2; i > 0; --i) {
		for (int j = 0; j < i; j++) {
			for (int k = j + i; k < n; k+=i) {
				int temp = arr[k];
				while (k>=i&&arr[k] < arr[k - i]) {
					arr[k] = arr[k - i];
					k -= i;
				}
				arr[k] = temp;
			}
		}
	}
}
void bubbleSort(int arr[], int n) {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				arr[j] ^= arr[j + 1] ^= arr[j] ^= arr[j + 1];
			}
		}
	}
}
void quickSort(int arr[], int end, int start=0) {
	if (end - start <= 2)return;
	int temp = arr[start];
	int low=start+1, high=end-1;
	while (low != high) {
		while (arr[high] > temp&&high>low)high--;
		while (arr[low] < temp&&low<high)low++;
		if(high!=low)
			arr[high] ^= arr[low] ^= arr[high] ^= arr[low];
	}
	arr[high] ^= arr[start] ^= arr[high] ^= arr[start];
	//show(arr, 9);
	quickSort(arr, high + 1, start);
	quickSort(arr, end, high+1);
}
void selectSort(int arr[], int n) {
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			if (arr[i] > arr[j])arr[i] ^= arr[j] ^= arr[i] ^= arr[j];
		}
	}
}
void heapSort(int arr[], int n) {
	for (int i = n - 1; i > 0; --i) {
		for (int j = (i - 1) / 2; j >= 0; --j) {
			if (2*j+1<=i&&arr[2 * j + 1] > arr[j])arr[2 * j + 1] ^= arr[j] ^= arr[2 * j + 1] ^= arr[j];
			if (2*j+2<=i&&arr[2 * j + 2] > arr[j])arr[2 * j + 2] ^= arr[j] ^= arr[2 * j + 2] ^= arr[j];
		}
		arr[0] ^= arr[i] ^= arr[0] ^= arr[i];
	}
}
void mergeSort(int arr[], int start, int mid, int end) {
	int* brr = new int[end - start + 1];
	if (start < end) {
		mergeSort(arr, start, (start + mid) / 2, mid);
		mergeSort(arr, mid + 1, (mid + 1 + end) / 2, end);
		int i, j;
		i = j = 0;
		while (i <= mid-start && j <= end - mid - 1) {
			if (arr[start+i] > arr[mid+1+j]) {
				brr[i + j++] = arr[mid+1+j];
			}
			else {
				brr[i++ + j] = arr[start+i];
			}
		}
		while (i <= mid - start) {
			brr[i++ + j] = arr[start+i];
		}
		while (j <= end - mid - 1) {
			brr[i + j++] = arr[mid + 1 + j];
		}
		for (int i = start; i <= end; i++) {
			arr[i] = brr[i-start];
		}
	}
}
int main(void) {
	int arr[] = { 5,1,4,11,42,3,9,2,6 };
	//insertSort(arr, 9);
	//BinsertSort(arr, 9);
	//shellSort(arr, 9);
	//bubbleSort(arr, 9);
	//quickSort(arr, 9);
	//selectSort(arr, 9);
	//heapSort(arr, 9);
	mergeSort(arr, 0, 4, 9-1);
	show(arr, 9);
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

alasnot

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

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

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

打赏作者

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

抵扣说明:

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

余额充值