黑马程序员技术交流社区

标题: 有人会快速排序吗,快速排序怎么写啊? [打印本页]

作者: itheima2xy    时间: 2015-3-4 12:36
标题: 有人会快速排序吗,快速排序怎么写啊?
有人会快速排序吗,快速排序怎么写啊?

作者: keeganlee    时间: 2015-3-4 13:05
这个不好说,就是先以一个元素为基准,把所有比他小的放在某一边,比他大的放在另一边,这样这个元素就在最总位置了,然后再递归遍历左边的和右边的就ok了
作者: Micro    时间: 2015-3-5 11:36
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 6
  4. int partition(int arr[], int low, int high){
  5.     int key;
  6.     key = arr[low];
  7.     while(low<high){
  8.         while(low <high && arr[high]>= key )
  9.             high--;
  10.         if(low<high)
  11.             arr[low++] = arr[high];
  12.         while( low<high && arr[low]<=key )
  13.             low++;
  14.         if(low<high)
  15.             arr[high--] = arr[low];
  16.     }
  17.     arr[low] = key;
  18.     return low;
  19. }
  20. void quick_sort(int arr[], int start, int end){
  21.     int pos;
  22.     if (start<end){
  23.         pos = partition(arr, start, end);
  24.         quick_sort(arr,start,pos-1);
  25.         quick_sort(arr,pos+1,end);
  26.     }
  27.     return;
  28. }
  29. int main(void){
  30.     int i;
  31.     int arr[N]={32,12,7, 78, 23,45};
  32.     printf("排序前 \n");
  33.     for(i=0;i<N;i++)
  34.         printf("%d\t",arr[i]);
  35.     quick_sort(arr,0,N-1);
  36.     printf("\n 排序后 \n");
  37.     for(i=0; i<N; i++)
  38.         printf("%d\t", arr[i]);
  39.     printf ("\n");
  40.     system("pause");
  41.     return 0;
  42. }
复制代码



快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止。
作者: itheima2xy    时间: 2015-3-5 13:19
Micro 发表于 2015-3-5 11:36
快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部 ...

谢谢解答!!!{:2_30:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2