1、快速排序
#include <stdlib.h>
#include <stdio.h>
#include <exception>
int RandomInRange(int min, int max)
{
int random = rand() % (max - min + 1) + min;
return random;
}
void Swap(int* num1, int* num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
int Partition(int data[], int length, int start, int end)
{
if (data==nullptr||length<=0||start<0||end>=length)
{
throw new std::exception("Invalid Parameters");
}
int index = RandomInRange(start, end);
Swap(&data[index], &data[end]);
int small = start - 1;
for (index = start; index < end;index++)
{
if (data[index]<data[end])
{
small++;
Swap(&data[index], &data[small]);
}
}
small++;
Swap(&data[small], &data[end]);
return small;
}
void QuickSort(int* array, int length, int start, int end)
{
if (end>start)
{
int index = Partition(array, length, start, end);
QuickSort(array, length, start, index - 1);
QuickSort(array, length,index + 1, end);
}
}
void Print(int* array, int length)
{
for (int i = 0; i < length;i++)
{
printf("%d\n",array[i]);
}
}
int main()
{
int array[8] = { 1, 0, 2, 7, 3, 9, 2, 6 };
QuickSort(array, 8, 0, 7);
Print(array, 8);
}
2、冒泡排序
#include <iostream>
using namespace std;
void swap(int array[], int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void BubbleSort1(int *arr, int sz)
{
for (int i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void BubbleSort2(int *arr, int sz)
{
for (int i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - 1 - i; j++)
{
if (arr[j] < arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void print(int* arr, int sz)
{
for (int i = 0; i < sz; i++)
{
cout << arr[i] << endl;
}
}
int main()
{
int a[4] = { 1, 4, 2, 6 };
BubbleSort2(a, 4);//递减
print(a, 4);
int* b = a;
BubbleSort1(b, 4);//递增
print(b, 4);
}
3、直接插入排序
#include <iostream>
using namespace std;
void InsertSort(int* a, int length)
{
if (length<=1)
{
return;
}
for (int i = 1; i < length;i++)
{
int temp = a[i];
int j = i - 1;
while (a[j]>temp&&j>=0)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
void print(int* arr, int sz)
{
for (int i = 0; i < sz; i++)
{
cout << arr[i] << endl;
}
}
int main()
{
int a[4] = { 1,3,1,2};
InsertSort(a, 4);//递减
print(a, 4);
}
4、归并排序
#include <iostream>
using namespace std;
void Merge(int* data, int start, int mid, int end)
{
int n = end - start + 1;
int *temp = new int[n];
memset(temp, 0, n);
int k = 0;
int i = start;
int j = mid + 1;
while (i <= mid&&j<=end)
{
if (data[i]<data[j])
{
temp[k++] = data[i++];
}
else
{
temp[k++] = data[j++];
}
}
if (i<=mid)
{
while (i<=mid)
{
temp[k++] = data[i++];
}
}
if (j<=end)
{
while (j<=end)
{
temp[k++] = data[j++];
}
}
for (int i = 0; i < n;i++)
{
data[start + i] = temp[i];
}
}
void MergeSort(int* data, int length, int start, int end)
{
if (data==nullptr||start<0||end>length||length<=0)
{
return;
}
if (end>start)
{
int mid = (start + end) / 2;
MergeSort(data, length, start, mid);
MergeSort(data, length, mid + 1, end);
Merge(data, start, mid, end);
}
}
void Print(int* data, int length)
{
for (int i = 0; i < length;i++)
{
printf("%d\n", data[i]);
}
}
int main()
{
int a[] = { 1, 6, 2, 8, 4, 0, 4, -1, 5, 8 };
MergeSort(a, 10, 0, 9);
Print(a, 10);
}