尝试写了一下快排。
另外安利一个快排的舞蹈演示,当然不止快排点击打开链接。
#include<stdlib.h>
#include<time.h>
enum Orientation
{
TOLEFT,
TORIGHT,
};
void show(int* src, int len) {
for (int i = 0; i < len; i++) {
printf("%d, ", *(src + i));
}
printf("\n\r");
}
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void quisort(int* src, int s, int e) {
// printf("recently , s is %d, e is %d , reference is %d ,\n\r", s, e, *(src+s));
// show(src, 8);
if (s >= e) {
return;
}
int reference = *(src + s);
int i = s;
int j = e;
int flag = -1;
Orientation orientation = TOLEFT;
while (i < j) {
// printf("sort , i= %d, j= %d, orientation : %d\n\r", i , j, orientation);
// show(src, 8);
if (orientation == TOLEFT) {
if (*(src + j) > reference) {
j--;
orientation = TOLEFT;
}
else
{
swap((src + i), (src + j));
i++;
orientation = TORIGHT;
}
}
else
{
if (*(src + i) > reference) {
swap(src + i, src + j);
j--;
orientation = TOLEFT;
}
else
{
i++;
orientation = TORIGHT;
}
}
}
//printf("sort over , i= %d\n\r", i);
//show(src, 8);
quisort(src, s, i-1);
quisort(src, i+1, e);
}
void process() {
int s[] = { 3,9,8,6,1,5,2,4 };
//randomize();
//srand(time(NULL));
for (int i = 0; i < 8; i++) {
s[i] = rand();
}
printf("raw data:\n\r");
show(s, 8);
quisort(s, 0, 7);
printf("final result :\n\r");
show(s, 8);
}
int main()
{
for (int i = 0; i < 10; i++) {
process();
}
return 0;
}