快速排序,一种实现

来源:互联网 发布:淘宝上买单机游戏 编辑:程序博客网 时间:2024/05/20 21:56

尝试写了一下快排。

另外安利一个快排的舞蹈演示,当然不止快排点击打开链接。

#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;}


0 0
原创粉丝点击