快速排序

快速排序为O(N*LogN)时间复杂度,对于中值的选择关系到排序的效率,所以也是一种不稳定的排序算法。而且使用了递归调用(所以大数据量的时候,对于开发环境最大支持递归数要有个确认,否则会栈溢出的,下场很难看),由于大量使用循环语句,对于死循环的警惕是十分必要的。总得来说快速排序是中不错的排序算法,在笔试面试中均常用来考查,呵呵。

 


#include "stdafx.h"
#include "stdio.h"

void QuickSort(int* pData, int start, int end)
{
 int mid = (start + end) / 2;
 int left = start;
 int right = end;
 do
 {
  //找一个大于中值的数
  while(pData[left] < pData[mid] && left < end)
   left++;

  //找一个小于中值的数
  while(pData[right] > pData[mid] && right > start)
   right--;

  //交换这两个数,数列前半部为小于中值的数,后半部为大于中值的数
  if( left <= right )
  {
   int temp = pData[left];
   pData[left] = pData[right];
   pData[right] = temp;
   //不要忘了下标增量
   left++;
   right--;
  }

 } while(left <= right);//遍历完毕


 //对前半部快排
 if( start < right )
  QuickSort(pData, start, right);

 //对后半部快排
 if( end > left )
  QuickSort(pData, left, end);
}


int _tmain(int argc, _TCHAR* argv[])
{
 int A[] = {11, 25, 57, 93, 27, 32, 2, 90, 86, 53};
 int count = sizeof(A) / sizeof(A[0]);

    QuickSort(A, 0, count-1);

 for( int i = 0; i < count; i++ )
  printf("%d  ", A[i]);

 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值