快速排序
此之前都是用sort(stl大法好)
一直知道原理,但是只写过一次发现手写的没stl里的快(里面加入了各种深度优化)
快排原理:先定一个目标数,然后把比它小的放在它左边,比它大的放在它右边,进行分治。最后每个分块都只有一个数那么排序OK了。
代码:
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define MAX 16
int q[20];
void Quicksort(int l,int r)
{
if(l>=r)
return;
int start=l;
int end=r;
int k=q[l];
while(start<end)
{
while(q[end]>=k&&start<end) //填入比它小的
end--;
q[start]=q[end];
while(q[start]<=k&&start<end) //填入比它大的
start++;
q[end]=q[start];
}
q[start]=k;
Quicksort(l,start-1); //分治法
Quicksort(start+1,r);
}
void print()
{
for(int i=0;i<MAX;i++)
printf("%d ",q[i]);
printf("\n");
}
int main()
{
srand(time(0));
printf("原始序列\n");
for(int i=0;i<MAX;i++)
{
q[i]=10+rand()%90;
}
print();
Quicksort(0,15);
printf("快速排序\n");
print();
}