快排之三

#include<iostream>
#include
<time.h>
using namespace std;

//递归实现快排
void QuickSort(int pData[],int left,int right)
{
int i=left,j=right,key=pData[left];
do
{
while(i<j&&pData[j]>key)
j
--;
if(i<j)
{
pData[i]
=pData[j];
i
++;
}
while(i<j&&pData[i]<key)
i
++;
if(i<j)
{
pData[j]
=pData[i];
j
--;
}
}
while (i<j);
pData[i]
=key; //循环结束时i==j
if(left<j)
QuickSort(pData,left,j
-1);
if(right>i)
QuickSort(pData,i
+1,right);
}


/*

//非递归实现快排
int QuickSort(int pData[],int left,int right)
{
int i=left,j=right,key=pData[left];
do
{
while(i<j&&pData[j]>=key)j--;
if(i<j){pData[i]=pData[j];i++;}
while(i<j&&pData[i]<=key)i++;
if(i<j){pData[j]=pData[i];j--;}
} while (i<j);
pData[i]=key;return i;
}
void NoRecQS(int pData[],int left,int right)
{
int stack[100][2],pivot,top=-1; //建立辅助栈stack,pivot为轴心的意思
if(left<right)
{
pivot=QuickSort(pData,left,right);
if(left<pivot-1){top++;stack[top][0]=left;stack[top][1]=pivot-1;}
if(right>pivot+1){top++;stack[top][0]=pivot+1;stack[top][1]=right;}
while(top!=-1) //top==-1表示栈空
{
left=stack[top][0];right=stack[top][1]; //之前已经保证stack[top][0]<stack[top][1],所以不必判断left是否小于right
pivot=QuickSort(pData,left,right);top--;//top--;退栈
if(left<pivot-1){top++;stack[top][0]=left;stack[top][1]=pivot-1;}
if(right>pivot+1){top++;stack[top][0]=pivot+1;stack[top][1]=right;}
}
}
}
*/

int main()
{
int data[]={49,38,65,60,58,32,58,97,76,13,27};
clock_t start,finish;
double a;
start
=clock();
//NoRecQS(data,0,10);
QuickSort(data,0,10);
finish
=clock();
a
=(double)(finish-start)/CLOCKS_PER_SEC;
printf(
"%f second needed\n",a);
for(int i=0;i<11;i++)
cout
<<data[i]<<" ";
cout
<<endl;
return 0;
}

  

转载于:https://www.cnblogs.com/mjc467621163/archive/2011/08/22/2149438.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值