《算法跬步》快速排序

来源:互联网 发布:跟美团众包类似软件 编辑:程序博客网 时间:2024/05/19 15:20

原理:把数组的第一个数据作为比较的原点(中间值),比该数据小的数据排列在左边,比该数据大的数据排列在右边,递增或递减直到首尾下标相等,该下标为中间值坐标。

实现步骤:

1、判断排序的数组是否有效;

2、排序  

     2.1 判断首下标是否小于尾下标,大于则return  

     2.2 寻找中间值的下标

     2.3 递归调用排序(分为:中间值前半部分和后半部分)


文件QuickSort.h

#include <iostream>using namespace std;class CQuickSort{public:void quicksort(int a[],int length);void quick_sort(int a[],int startx,int endx);int getmedian(int a[],int s,int e);};


文件QuickSort.cpp

#include "stdafx.h"#include "QuickSort.h"using namespace std;void CQuickSort::quicksort( int a[],int length ){//判断数组是否有效if (NULL == a || 0 == length){return;}//开始排序int st = 0,ed = length-1;quick_sort(a,st,ed);}//排序代码void CQuickSort::quick_sort( int a[],int startx,int endx ){if (startx >= endx){return;}int median = 0;median = getmedian(a,startx,endx);quick_sort(a,startx,median-1);quick_sort(a,median+1,endx);}//查找中间值(核心代码)//挖坑填充:// 将a[0]的值给一个变量,然后a[0]就空出来了,从倒数第一个数a[n]递减找到比中间值小的数a[k],将其填充到a[0],然后a[k]空出来了,在从a[0]递增得到的a[i]如果比中间值大则又可以填充到a[k],以此原理进行排序,最后可找到中间值的位置。int CQuickSort::getmedian( int a[],int s,int e ){int midval = a[s];if (s >= e){return 0;}while(s < e){if (a[e] < midval){a[s] = a[e];s++;while ((s < e) && (a[s] <= midval)){s++;}a[e] = a[s];}elsee--;}if (s == e){a[s] = midval;}return s;}


原创粉丝点击