快速排序的一种实现
程序员文章站
2022-06-10 10:43:52
...
闲来没事,写了一个程序玩玩,省的到时候会了Shell,又不会C的编程了【手动痛哭】
本着简明的原则,选取的标准数是在数组的 开头 或者 结尾处
这里需要注意,如果你选择的基准数是在左侧,那么就需要从右侧开始遍历数组;从右侧选取的基准数也是同理。
#include <iostream>
#include <stdlib.h>
#include <time.h>
using std::cout;
using std::endl;
void qsort_reverse(int array[], int begin, int end)
{
if ( end <= begin )
{
return;
}
int tmp = array[end];
int head = begin;
int foot = end;
while(true)
{
for(; head <= end; ++head)
{
if(array[head] > tmp)
{
break;
}
}
if(head > foot)
{
head = foot;
array[foot] = tmp;
break;
}
else
{
array[foot] = array[head];
}
for(; foot >= begin; --foot)
{
if(array[foot] <= tmp)
{
break;
}
}
if(foot < head)
{
foot = head;
array[head] = tmp;
break;
}
else
{
array[head] = array[foot];
}
}
qsort_reverse(array, begin, head-1);
qsort_reverse(array, head + 1, end);
}
void qsort(int array[], int begin, int end)
{
if ( end <= begin )
{
return;
}
int tmp = array[begin];
int head = begin;
int foot = end;
while(true)
{
for(; foot >= begin; --foot)
{
if(array[foot] <= tmp)
{
break;
}
}
if(foot < head)
{
foot = head;
array[head] = tmp;
break;
}
else
{
array[head] = array[foot];
}
for(; head <= end; ++head)
{
if(array[head] > tmp)
{
break;
}
}
if(head > foot)
{
head = foot;
array[foot] = tmp;
break;
}
else
{
array[foot] = array[head];
}
}
qsort(array, begin, head-1);
qsort(array, head + 1, end);
}
int main(int argc, char** argv)
{
srand(time(NULL));
int array[10];
for (int i = 0; i < 10; ++i)
{
array[i] = rand() % 100;
}
for(int i = 0; i < 10; ++i)
{
cout << array[i] << " - ";
}
cout << endl;
//qsort(array, 0, 9);
qsort_reverse(array, 0, 9);
for(int i = 0; i < 10; ++i)
{
cout << array[i] << " - ";
}
cout << endl;
return 1;
}