C语言的快速排序算法
来源:互联网 发布:findit软件序列号 编辑:程序博客网 时间:2024/05/17 08:58
一、快速排序算法(Quicksort)
基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3. 步骤
a. 先从数列中取出一个数作为基准数。
b. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
c. 再对左右区间重复第二步,直到各区间只有一个数。
二、C语言实现代码(仅供参考)
-
-
-
-
-
-
-
- #include <stdio.h>
- #include <stdlib.h>
-
- #define BUF_SIZE 10
-
-
-
-
-
-
-
- void display(int array[], int maxlen)
- {
- int i;
-
- for(i = 0; i < maxlen; i++)
- {
- printf("%-3d", array[i]);
- }
- printf("\n");
-
- return ;
- }
-
-
-
-
-
-
-
- void swap(int *a, int *b)
- {
- int temp;
-
- temp = *a;
- *a = *b;
- *b = temp;
-
- return ;
- }
-
-
-
-
-
-
-
- void quicksort(int array[], int maxlen, int begin, int end)
- {
- int i, j;
-
- if(begin < end)
- {
- i = begin + 1;
- j = end;
-
- while(i < j)
- {
- if(array[i] > array[begin])
- {
- swap(&array[i], &array[j]);
- j--;
- }
- else
- {
- i++;
- }
- }
-
-
-
-
-
-
-
-
- if(array[i] >= array[begin])
- {
- i--;
- }
-
- swap(&array[begin], &array[i]);
-
- quicksort(array, maxlen, begin, i);
- quicksort(array, maxlen, j, end);
- }
- }
-
-
- int main()
- {
- int n;
- int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
- int maxlen = BUF_SIZE;
-
- printf("排序前的数组\n");
- display(array, maxlen);
-
- quicksort(array, maxlen, 0, maxlen-1);
-
- printf("排序后的数组\n");
- display(array, maxlen);
-
- return 0;
- }
-
-
-
-
-
-
-
- #include <stdio.h>
- #include <stdlib.h>
-
- #define BUF_SIZE 10
-
-
-
-
-
-
-
- void display(int array[], int maxlen)
- {
- int i;
-
- for(i = 0; i < maxlen; i++)
- {
- printf("%-3d", array[i]);
- }
- printf("\n");
-
- return ;
- }
-
-
-
-
-
-
-
- void swap(int *a, int *b)
- {
- int temp;
-
- temp = *a;
- *a = *b;
- *b = temp;
-
- return ;
- }
-
-
-
-
-
-
-
- void quicksort(int array[], int maxlen, int begin, int end)
- {
- int i, j;
-
- if(begin < end)
- {
- i = begin + 1;
- j = end;
-
- while(i < j)
- {
- if(array[i] > array[begin])
- {
- swap(&array[i], &array[j]);
- j--;
- }
- else
- {
- i++;
- }
- }
-
-
-
-
-
-
-
-
- if(array[i] >= array[begin])
- {
- i--;
- }
-
- swap(&array[begin], &array[i]);
-
- quicksort(array, maxlen, begin, i);
- quicksort(array, maxlen, j, end);
- }
- }
-
-
- int main()
- {
- int n;
- int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
- int maxlen = BUF_SIZE;
-
- printf("排序前的数组\n");
- display(array, maxlen);
-
- quicksort(array, maxlen, 0, maxlen-1);
-
- printf("排序后的数组\n");
- display(array, maxlen);
-
- return 0;
- }
执行程序后的结果如下所示:
0 0