int part(int a[],int l,int r)
{
int num = a[r];
int cur = l;
int x = l-1;
int y = r;
while (cur < y+1)
{
if (a[cur] <= num)
{
swap(a[cur++], a[++x]);
}
else
{
cur++;
}
}
return x - 1;
}
void ClassicQuickRow(int arr[],int l,int r)
{
if (l < r)
{
int a= part(arr, l, r);
ClassicQuickRow(arr, l, a);
ClassicQuickRow(arr, a + 1, r);
}
}
int* partion(int a[], int l, int r)
{
int b[2];
int cur = l;
int x = l - 1;
int y = r +1 ;
int num = a[r];//最后的改进则是使用随机数,避免了数据本身的情况
//int num=a[l+rand()%(r-l+1)];
while (cur < y)
{
if (a[cur] < num)
{
swap(a[cur++], a[++x]);
}
else if (a[cur] > num)
{
swap(a[cur], a[--y]);
}
else
{
cur++;
}
}
b[0] = x;
b[1] = y;
return b;
}
void imsort(int a[], int l, int r)
{
if (l < r)
{
int *p = partion(a, l, r);
imsort(a, l, *p);
imsort(a, *(p + 1), r);
}
}
经典快排,和改进快排
最新推荐文章于 2024-01-19 17:50:40 发布