归并排序
#include <stdio.h>
void merge(int* arr, int p, int mid, int q)
{
int tmp[100];
int t = 0;
int i = p, j = mid + 1;
while (i <= mid && j <= q) {
if (arr[i] <= arr[j]) {
tmp[t++] = arr[i];
++i;
} else {
tmp[t++] = arr[j];
++j;
}
}
while (i <= mid) {
tmp[t++] = arr[i++];
}
while (j <= q) {
tmp[t++] = arr[j++];
}
for (int k = 0; k < t; ++k) {
arr[p + k] = tmp[k];
}
}
void MergeSort(int* arr, int p, int q)
{
if (arr == NULL || p >= q) {
return;
}
int mid = p + ((q - p) >> 1);
MergeSort(arr, p, mid);
MergeSort(arr, mid + 1, q);
merge(arr, p, mid, q);
}
void QuickSort(int* arr, int start, int end)
{
if (start >= end) {
return;
}
int pivot = arr[end];
int i = start, j = end - 1;
while (i <= j) {
while (i <= j && arr[j] >= pivot) {
--j;
}
while (i <= j && arr[i] <= pivot) {
++i;
}
if (i < j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
arr[end] = arr[i];
arr[i] = pivot;
QuickSort(arr, start, i - 1);
QuickSort(arr, i + 1, end);
}
#include <stdio.h>
#include <stdlib.h>
#include "sort.h"
int main()
{
int a[10] = {5, 8, 7, 9, 3, 1, 6, 4, 2, 0};
MergeSort(a, 0, 9);
for (int i = 0; i < 10; ++i) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}