算法思想:
基础定义一个基准变量tem 两个移位变量low high
移动规则:首先high向前移动一位跟tem比较如果比tem大、继续向前移,如果比tem小把high的值放到第一次时基low的位置。然后移动low向后移如果比基准小、继续向后移,如果比基准大去覆盖high此时的值(此时的值已经被复制到前面low没移动的位置)
一轮的结果就是:↓↓↓
6就是tem,第一轮就是为了让tem在一个合适的位置,左边都是比tem小,右边都是比tem大。
(其次就是在基准前边和后边各使用这个思想,最终达到排序的目的)
整体演示动画:
时间空间复杂度
c语言程序实现:
#include "stdio.h"
void Quick_sort(int *nr,int left,int right);
int main()
{
int a[10]={8,5,4,1,2,6,1};
int i,num;
// for(i=0;i<5;i++)
// {
// scanf("%d",&a[i]);
// }
num=(sizeof(a)/4)-1;
printf("%d\n",num);
Quick_sort(a,0,num);
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
return 0;
}
void Quick_sort(int *nr,int left,int right)
{
if(left>=right)
return;
int left1=left;
int right1=right;
int key= nr[left];
while(left1<right1)
{
while(left1 < right1&&nr[right1]>=key)
{
right1--;
}
nr[left1]=nr[right1];
while(left1<right1&&nr[left1]<=key)
{
left1++;
}
nr[right1]=nr[left1];
nr[left1]=key;
Quick_sort(nr,left,left1-1);
Quick_sort(nr,right1+1,right);
}
}
参考链接:
https://blog.youkuaiyun.com/nrsc272420199/article/details/82587933
https://blog.youkuaiyun.com/qq_16635277/article/details/86572416