Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69808
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:46:31

根据《算法导论》中快速排序的描述实现代码。
(已测试)

点击(此处)折叠或打开

  1. /*
  2.  * =====================================================================================
  3.  *
  4.  * Filename: qsort.c
  5.  *
  6.  * Description:
  7.  *
  8.  * Version: 1.0
  9.  * Created: 12/17/2012 09:06:10 PM
  10.  * Revision: none
  11.  * Compiler: gcc
  12.  *
  13.  * Author: royn.wang.renyuan@gmail.com (),
  14.  * Organization:
  15.  *
  16.  * =====================================================================================
  17.  */
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20. #define swap(a,b) {if(a!=b){(a)^=(b); (b)^=(a); (a)^=(b);}}
  21. //#define swap(a, b) a^=b^=a^=b
  22. //#define swap(A,B) A^=B;B^=A;A^=B

  23. int partition(int input[], int start, int end){

  24.     int low, high;
  25.     low = start-1;
  26.     high = start;
  27.     int piv = input[end];
  28.     for(;high<end;high++){
  29.         if(input[high]<=piv){
  30.             low++;
  31.             swap(input[low],input[high]);
  32.         }
  33.     }
  34.     low++;
  35.     swap(input[low],input[end]);
  36.     return low;
  37. }
  38. void qsortt(int input[], int start, int end){
  39.     if(start<end){
  40.         int mid = partition(input,start,end);
  41.         qsortt(input,start,mid-1);
  42.         qsortt(input,mid+1,end);
  43.     }
  44. }

  45. int main(){
  46.     int input[] = {3,2,5,6,1};
  47.     qsortt(input, 0, 4);
  48.     int i = 0;
  49.     for(;i<sizeof(input)/sizeof(int);i++){
  50.         printf("%d ",input[i]);
  51.     }
  52.     return 1;
  53. }

阅读(151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~