#include<stdio.h>
#include<iostream>
//算法导论中第七章原文中给出的方式,同侧的两个指针
void QuickSort1(int* data,int num,int r)
{
int val=data[r-1];
int* pFirst=data;
int* pSec=data;
while(pFirst<=data+r-1)
{
while(*pFirst<=val)
{
int temp=*pFirst;
*pFirst=*pSec;
*pSec=temp;
if(pFirst==data+r-1)
break;
++pFirst;
++pSec;
}
++pFirst;
}
}
//快排的初始HOARE版本,首尾的两个指针
void QuickSort2(int* data,int num,int r)
{
int val=data[r-1];
int* pBegin=data;
int* pEnd=data+r-1;
while(pBegin<=pEnd)
{
while(*pBegin<val)
++pBegin;
while(*pEnd>val)
--pEnd;
if(pBegin>=pEnd)
break;
int temp=*pBegin;
*pBegin=*pEnd;
*pEnd=temp;
}
}
int main()
{
int test[]={1,5,6,7,3,2,4};
QuickSort2(test,7,7);
QuickSort1(test,7,7);
return 0;
}
快排 同向双指针对向双指针
最新推荐文章于 2023-05-11 16:23:39 发布