数据结构排序-快速排序

快速排序是对冒泡排序的改进,它的基本思想是通过一趟排序将数据分成两部分,一部分中的数据都比另一部分中的数据小,再对这两部分中的数据再排序,直到整个序列有序,如下图所示。

快排的递归实现:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int n;
 5 
 6 /*
 7  * 分割使枢轴记录的左边元素比右边元素小
 8  */
 9 int Partition(int *array, int low, int high)
10 {
11     int pivotkey = array[low];
12     array[0] = array[low];
13     while (low < high)
14     {
15         while (low < high && array[high] >= pivotkey)
16         {
17             high--;
18         }
19         array[low] = array[high];
20         while (low < high && array[low] <= pivotkey)
21         {
22             low++;
23         }
24         array[high] = array[low];
25     }
26     array[low] = array[0];
27     return low;
28 }
29 
30 /*
31  * 快速排序递归实现
32  */
33 void QuickSort(int *array, int low, int high)
34 {
35     if (low < high)
36     {
37         int pivotloc = Partition(array, low, high);
38         QuickSort(array, low, pivotloc - 1);
39         QuickSort(array, pivotloc + 1, high);
40     }
41 }
42 
43 int main()
44 {
45     int i;
46     int *array;
47     printf("请输入数组的大小:");
48     scanf("%d", &n);
49     array = (int*) malloc(sizeof(int) * (n + 1));
50     printf("请输入数据(用空格分隔):");
51     for (i = 1; i <= n; i++)
52     {
53         scanf("%d", &array[i]);
54     }
55     QuickSort(array, 1, n);
56     printf("排序后为:");
57     for (i = 1; i <= n; i++)
58     {
59         printf("%d ", array[i]);
60     }
61     printf("\n");
62 }

 

冒泡排序的时间复杂度是O(n^2),快排是O(n*logn)。

快排的非递归实现:

 

posted @ 2015-05-27 16:22  niceforbear  阅读(274)  评论(0编辑  收藏  举报