村夫的小田园

非递归:

#include <stdio.h>#include <stdlib.h>int partition(int s[], int i, int j){int value = 0;int flag = 1; //判断该从头循环还是尾循环value = s[i];while(i<j){switch(flag){case 0:if(s[i] < value)i++;else{s[j–] = s[i];flag = 1;}break;case 1:if(s[j] >= value)j–;else{s[i++] = s[j];flag = 0;}break;}}s[i] = value;return i;}void quick_sort(int s[], int l, int r){int *stack = (int *)malloc(sizeof(int)*(r-l+1));int top = 0;int index1, index2;int res;stack[top++] = r;stack[top++] = l;while(top!=0){index1 = stack[–top];index2 = stack[–top];res = partition(s, index1, index2);if(res != index2) //后部分partiton未结束{stack[top++] = index2;stack[top++] = res+1;}if(res != index1) //前部分partion未结束{stack[top++] = res-1;stack[top++] = index1;}}free(stack);stack = NULL;}int main(){int number[10] = {8, 1, 8, 4, 9, 5, 8, 10, 3, 6};quick_sort(number, 0, 9);int i;for(i=0; i<10; i++){printf("%d, ", number[i]);}printf("\n");return 0;}

递归:

#include <stdio.h>#include <stdlib.h>int partition(int s[], int i, int j){int value = 0;int flag = 1; //判断该从头循环还是尾循环value = s[i];while(i<j){switch(flag){case 0:if(s[i] < value)i++;else{s[j–] = s[i];flag = 1;}break;case 1:if(s[j] >= value)j–;else{s[i++] = s[j];flag = 0;}break;}}s[i] = value;return i;}void quick_sort(int s[], int l, int r){int res;if(l<r){res = partition(s, l, r);quick_sort(s, l, res-1);quick_sort(s, res+1, r);}}int main(){int number[10] = {8, 1, 8, 4, 9, 5, 8, 10, 3, 6};quick_sort(number, 0, 9);int i;for(i=0; i<10; i++){printf("%d, ", number[i]);}printf("\n");return 0;}

,今天不想走,明天就要跑了。

村夫的小田园

相关文章:

你感兴趣的文章:

标签云: