快速排序

 输入一组数据小到大排序

 

  void quick_sort(int *array, int left, int right)

 

  {

 

  if(left < right)

 

  {

 

  int i=left,j=right; /* i,j分别为左右 游标 */

 

  while(i != j){

 

  /* 扫描右边查找比比基准点小的数,如果是大的只需移动下标 */

 

  while(i!=j && array[j]>array[i]) /* 此时基准点为 array[i] */

 

  j--;

 

  /* 上面的循环结束,说明在右边找到一个比基准的小的数 */

 

  if(i!=j){

 

  array[j] = array[i] ^ array[j]; /* 将基准点从i处换到j处 */

 

  array[i] = array[i] ^ array[j];

 

  array[j] = array[i] ^ array[j];

 

  i++; /* 当前下标为j的数字 已经被置换到下标为i的位置,而此时的这个数据小于基准点,所以i++为下一个左边需要比较的数 */

 

  }

 

  while(i!=j && array[i]<array[j]) /* 此时基准点为 array[j] */

 

  i++;

 

  /* 上面的循环结束,说明在左边找到一个比基准的大的数 */

 

  if(i!=j){

 

  array[i] = array[i] ^ array[j]; /* 将基准点从j处换到i处 */

 

  array[j] = array[i] ^ array[j];

 

  array[i] = array[i] ^ array[j];

 

  j--; /* 基准点已经放到i的地方去了。下一个循环我们将比较j--处的数据是否比基准点小 */

 

  }

 

  };

 

  /* 上面的循环结束,说明已经将数据安装 {小于Key的数据}Key{大约Key的数据} 排列。此时i=j指向基准点 */

 

  quick_sort(array, left, i-1);

 

  quick_sort(array, i+1, right);

 

  }

 

  }

posted @ 2012-03-07 16:04  月之华  阅读(127)  评论(0编辑  收藏  举报