快速排序函数声明

快速排序函数声明:

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值