快速排序

来源:互联网 发布:武汉光谷相关数据 编辑:程序博客网 时间:2024/06/07 13:01

快速排序

此之前都是用sort(stl大法好)

一直知道原理,但是只写过一次发现手写的没stl里的快(里面加入了各种深度优化)

快排原理:先定一个目标数,然后把比它小的放在它左边,比它大的放在它右边,进行分治。最后每个分块都只有一个数那么排序OK了。

代码:

#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>#define MAX 16int 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();}



原创粉丝点击