快速排序

来源:互联网 发布:钱多事少离家近 知乎 编辑:程序博客网 时间:2024/05/18 03:23

呈现快速排序的三个不同版本,以最后一个主元素为元,以第一个元素为主元,随机主元。

1、以最后一个主元素为元

int partition(int *A, int p, int r);void swap(int *a, int *b);void quick_sort(int *A, int p, int r)  // 递归式---thomas{int q;if ( p < r ){q = partition(A, p, r);quick_sort(A, p, q-1);quick_sort(A, q+1, r);}}void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}int partition(int *A, int p, int r){int key;int i, j;i = p - 1;key = A[r];for ( j = p; j < r; j ++ ){if ( A[j] < key ){i ++;swap(A+i, A+j);}}//i++;swap(A+i+1, A+r);return i+1;}

2、以第一个元素为主元

int partition(int *A, int p, int r);void swap(int *a, int *b);void quick_sort(int *A, int p, int r){int q;if (p < r){q = partition(A, p, r);quick_sort(A, p, q-1);quick_sort(A, q+1, r);}}void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}int partition(int *A, int p, int r){int key;int i, j;key = A[p];i = p;for (j = p + 1; j <= r; j++){if (A[j] <= key){i++;swap(A+i, A+j); //you can also use swap(&A[i], &A[j])}}swap(A+p, A+i);return i;}void print_arr(int *A, int n){int i;for (i = 0; i < n; i++)printf("%d \n", A[i]);}void main(){int Array[5] = {1, 5, 2, 3, 7};//print_arr(Array, 5);quick_sort(Array, 0, 4);print_arr(Array, 5);}
3、随机主元

#include <stdio.h>#include <stdlib.h>#include <time.h>int partition(int *A, int p, int r);void swap(int *a, int *b);int Random(int p, int r);int Random(int p, int r){int ran_num;srand((unsigned)time(0));ran_num = rand() % (r+1-p) + p;return ran_num;}void quick_sort(int *A, int p, int r){int q;if (p < r){q = partition(A, p, r);quick_sort(A, p, q-1);quick_sort(A, q+1, r);}}void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}int partition(int *A, int p, int r){int key, pivot;int i, j;    pivot = Random(p, r);swap(A+p, A+pivot);key = A[p];i = p;for (j = p + 1; j <= r; j++){if (A[j] <= key){i++;swap(A+i, A+j); //you can also use swap(&A[i], &A[j])}}swap(A+p, A+i);return i;}void print_arr(int *A, int n){int i;for (i = 0; i < n; i++)printf("%d \n", A[i]);}void main(){int Array[5] = {1, 5, 2, 3, 7};//print_arr(Array, 5);quick_sort(Array, 0, 4);print_arr(Array, 5);}

原创粉丝点击