#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <string.h>
using namespace std;
void showArr(int* arr, int n)
{
printf("arr:[");
for (int i = 0; i < n; i++)
{
i&& printf(",");
printf("%d", arr[i]);
}
printf("]\n");
}
void insertSort(int* arr, int n)
{
int i, j;
for (i = 1; i < n; i++)
{
for (j = i; j > 0 && arr[j] < arr[j - 1]; j--)
{
swap(arr[j], arr[j-1]);
}
}
}
void bubbleSort(int* arr, int n)
{
int i, j;
for (i = 1; i < n; i++)
{
for (j = 0; j < n-i; j++)
{
if (arr[j] > arr[j + 1])
swap(arr[j], arr[j + 1]);
}
}
return;
}
void mergeSort(int* arr, int l, int r)
{
if (l == r) return;
int mid = (l + r) >> 1;
mergeSort(arr, l, mid);
mergeSort(arr, mid + 1, r);
int* tmp = (int*)malloc(sizeof(int) * (r - l + 1));
int p = l, q = mid + 1, k = 0;
while (p <= mid || q <= r)
{
if (q > r || (p <= mid && arr[p] < arr[q]))
tmp[k++] = arr[p++];
else
tmp[k++] = arr[q++];
}
memcpy(arr + l, tmp, sizeof(int) * (r - l + 1));
free(tmp);
return;
}
void selectSort(int* arr, int n)
{
int i, j,index;
for (int i = 0; i < n - 1; i++)
{
index = i;
for (int j = i + 1; j < n; j++)
{
if (arr[index] > arr[j]) index = j;
}
swap(arr[i], arr[index]);
}
return;
}
void quickSort(int* a, int l, int r)
{
if (l >= r) return;
int x = a[l], i = l - 1, j = r + 1;
while (i < j) {
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j) swap(a[i], a[j]);
}
quickSort(a, l, j);
quickSort(a, j + 1, r);
}
int main()
{
srand(time(0));
#define ARRLEN 10
int arr[ARRLEN];
int i;
for (i = 0; i < ARRLEN; i++)
{
arr[i] = rand() % 100;
}
showArr(arr, ARRLEN);
//bubbleSort(arr, ARRLEN);
//insertSort(arr, ARRLEN);
//mergeSort(arr, 0, ARRLEN - 1);
//selectSort(arr, ARRLEN);
quickSort(arr, 0, ARRLEN - 1);
showArr(arr, ARRLEN);
return 0;
}
11.数据结构之排序算法
最新推荐文章于 2024-10-01 22:51:02 发布