码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序算法

时间:2015-05-15 19:18:41      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

关于递归调用的应用——快速排序

快速排序的思路如下:
  1. 从需要排序的数据中,找到一个适当的基准值(pivot)。
  2. 将需要排序的数据按照小于pivot和大于pivot进行分类。
  3. 对分类后的两类数据各自再次进行上述的1和2的处理。

  如果排列对象是数组,上边第二个步骤就麻烦点。下边是在不使用打的临时内存区域的情况下,对数组进行分类
的思路(默认为升序排序):

  1. 从左向右,检索比pivot大的数据。
  2. 从右向左,检索比pivot小的数据。
  3. 如果两个方向都能检索到数据,将找到的数据交换。
  4. 重复进行1~3的操作,直到从左开始检索的下标和从右开始检索的下标发送冲突为止。

代码清单

  1. #define SWAP(a,b){int temp; temp=a; a=b; b=temp;}
    void quick_sort_sub(int*data,int left,int right)
    {
    int left_index=left;
    int right_index=right;
    int pivot=data[(left+right)/2];
    while(left_index<=right_index)
    {
    for(;data[left_index]<pivot;left_index++)
    ;
    for(;data[right_index]<pivot;right_index++)
    ;
    if(left_index<=right_index)
    {
    SWAP(data[left_index],data[right_index]);
    left_index++;
    right_index--;
    }
    }
    if(right_index>left)
    {
    quick_sort_sub(data,left,right_index);
    }
    if(left_index<right)
    {
    quick_sort_sub(data,left_index,right);
    }
    }
    void quick_sort(int*data,int data_size)
    {
    quick_sort_sub(data,0,data_size-1);
    }
    

      

 



快速排序算法

标签:

原文地址:http://www.cnblogs.com/henghenghaha/p/4506538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!