快排
快速排序
/*
description:
快速排序
参考<<编程珠玑>>
author:Jason
date:20160517
*/
#include<stdio.h>
#include<iostream>
using namespace std;
int show_data(int data[],int len)
{
cout<<"-----------------------"<<endl;
for (int i=0;i<len;i++)
{
cout<<data[i]<<"\t";
}
cout<<endl;
return 0;
}
int my_qsort(int data[],int l,int u)
{
if (l>=u)
{
return 0;
}
int t=data[l];
int i=l;
int j=u;
while(i<j)
{
while(i<=u && data[i]<=t)
{
i++;
}
while (data[j]>t)
{
j--;
}
if (i>j)//必须
{
break;
}
swap(data[i],data[j]);
}
//排序后 j=n i=n+1 data[j]<t data[i]>t
swap(data[l],data[j]);//把比较变量放中间,已经排好序,不需要变动
my_qsort(data,l,j-1);
my_qsort(data,j+1,u);
return 0;
}
int main()
{
int data[]={31,-41,59,26,-53,58,97,-93,-23,84,33,22};
int len=sizeof(data)/sizeof(data[0]);
cout<<"len="<<len<<endl;
show_data(data,len);
my_qsort(data,0,len-1);
show_data(data,len);
return 0;
}
结果