#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;
}
数据结构 严蔚敏 八大排序
最新推荐文章于 2024-07-25 17:45:03 发布