算法思想:找到一个基准(第一个数据),从后往前找比基准小的数字,往前移动,从前往后找比基准大的数据,往后移动。
其特点:越有序越慢,若完全有序则退化成了选择排序
时间复杂度,空间复杂度
,不稳定。
代码如下:
#include<stdio.h>
//一次划分
int Partiton(int* arr, int low, int high)
{
int tmp = arr[low];
while (low < high)
{
//从后往前找比基准小的数字,往前移动
while (low<high && arr[high]>tmp)
{
high--;
}
if (low < high)
{
arr[low] = arr[high];
}
//从前往后找比基准大的数据,往后移动
while (low < high && arr[low] <= tmp)
{
low++;
}
if (low < high)
{
arr[high] = arr[low];
}
}
arr[low] = tmp;
return low;
}
//快速排序
void Quicksort(int* arr, int low, int high)
{
if (low < high)
{
int pivot = Partiton(arr, low, high);
//对基准元素左侧的子数组进行快速排序
Quicksort(arr, low, pivot - 1);
//对基准元素右侧的子数组进行快速排序
Quicksort(arr, pivot + 1, high);
}
}
void Show(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 7,6,2,3,1,4,5,8,9,10 };
int len = sizeof(arr) / sizeof(arr[0]);
Quicksort(arr, 0, len - 1);
Show(arr, len);
return 0;
}