快速排序函数声明

来源:互联网 发布:淘宝冻结卖家资金15天 编辑:程序博客网 时间:2024/05/21 19:22

快速排序函数声明:

void quick(T* a , int n);

 

快速排序算法简介

假设数组长度为n

数组定义方式: T  a[10];

T是模板类型,相当于JAVA 1.5后出现的范型

 

先交换下标为 0 和 下标为 n>>1 的元素

swap(*a ,  a[n>>1]) ;

然后取得指向第二个元素的指针(也就是数组中第二个元素的地址)

T * L = a+1;   左指针

再取得指向最后一个元素的指针(也就是数组中最后一个元素的地址)

T* R  = a + n - 1;  

取中间值(交换后下标为0的数组元素)

T* mid =  *a;

 

while(L < R)

{

  while(L<R && *L <= mid) L++;

   while(R>a && *R > mid) R--;

   //  *L  mid  *R  这种顺序下 L++,R--;

  /*

  从左边开始搜索,只要出现一个比中间值大的数组元素

  (自定义类型请重载 > 符号,友元,成员都可以),终止搜索

  从右边开始搜索,只要出现一个比中间值小的数组元素

 (自定义类型请重载 < 符号,友元,成员都可以),终止搜索

 

 

 */

 

  

   if(L < R) swap(*L , *R);

  /* 

  如果L ,R指针没有相遇 , 则交换

  swap(const T& a ,const T& b)是using namespace std(相当于C中的#include<stdlib.h>)

  定义好的,直接用

   */ 

}

 if(*a > *R) swap(*a,*R);

/ /如果位于0位置的中间值 > R指针指向的值 , 交换

这样一次排序完成

保证中间值左边都是比它小的值,右边都是比它大的值

然后递归

对中间值左边的数组元素排序

quick(a,R-a);

中间值地址是指针R的值

对中间值右边的数组元素排序

quick(R+1,n-(R-a)-1);

 

n<=1 if(n<=1) return;

原创粉丝点击