- #include<stdio.h>
- // 快速排序
- int main(){
- int a[]={2,1,5,4,3,8,9,6,7};
- int* b=a-1+sizeof(a)/4; // 基准指针
- int* i=a-1; // 慢指针
- int* j=a; // 快指针
- int QS(int* tb,int* ti,int* tj);
- QS(b,i,j);
- for(int k=0;k<sizeof(a)/4;k++){
- printf("%d",a[k]);
- }
- }
- //QuickSort
- int QS(int* tb,int* ti,int* tj){
- // 如果数组空或只有一个数不用排序
- if(tb<=tj){
- return 0;
- }
- void swap(int *ti2,int* tj2);
- int* b=tb;
- int* i=ti;
- int* j=tj;
- int* t=ti;
- while(true){
- if(*j<*b){
- i++;
- swap(i,j);
- j++;
- }else{
- j++;
- }
- if(j==b){
- i++;
- swap(i,j);
- break;
- }
- }
- // 判断左区是否还可以运算
- if(i>t+1){
- QS(i-1,t,t+1);
- }
- // 判断右区是否还可以运算
- if(b>i+1){
- QS(b,i,i+1);
- }
- }
- // 交换两个指针的数据
- void swap(int *ti2,int* tj2){
- int t=*ti2;
- *ti2=*tj2;
- *tj2=t;
- }
来源: http://www.bubuko.com/infodetail-3129493.html