排序算法-快速排序(直观总结分析)
来源:互联网 发布:mmd导入镜头数据 编辑:程序博客网 时间:2024/06/11 19:45
快速排序算法是比较经典的排序算法。
但其中心思想还是比较简单的,就是“挖坑”和“填坑”的过程。
这里的“坑”经常会被随机化,以防止快排的最坏情况出现。当然,我们拿到一个数列后,也可以先将该数列整体随机化,从而避免每次都要随机“选坑”。
今天重新复习了一下,也总结了不同形式的快排~总结如下:
1. 常见的快速排序形式:
#include <iostream>using namespace std;void quickSort(int *array, int Begin, int End){ if(Begin<End) { int begin = Begin; int end = End; int temp = array[end];//挖坑 while(begin<end) { while(begin<end && array[begin]<=temp) begin++; if(begin<end) array[end--] = array[begin]; //从前向后填坑 while(begin<end && array[end]>=temp) end--; if(begin<end) array[begin++] = array[end]; //从后向前填坑 } array[begin]=temp; //填上“中间”的坑 quickSort(array, Begin, begin-1);//递归 quickSort(array, begin+1, End); }}//输出数组 void printArray(int *array, int length){ for(int i=0; i<length; i++) cout<<array[i]<<"\t"; cout<<endl;}int main(){ int array[5]={4, 2, 1, 7, 5}; printArray(array, 5); quickSort(array, 0, 5); printArray(array, 5); system("pause"); return 0;}
2.另一种形式(见《剑指offer》P64)
int Partion(int data[], int length, int start, int end){ if(data == NULL || length<=0 || start<0 || end >=length) throw new std::exception("Invalid Parameters"); int index = RandomInRange(start, end);//挖坑 Swap(&data[index], &data[end]); int small = start-1; //small变量的设置是它与传统快排最大的不同之处 for(index = start; index < end; ++ index) { if(data[index] < data[end]) { ++small; //small总是指向比“坑”中数字大的前一个数字 if(small != index) Swap(&data[index], &data[small]); } } ++small; Swap(&data[small], &data[end]); return small; } void QuickSort(int data[], int length, int start, int end){ if(start == end) return; int index = Partion(data, length, start, end); if(index > start) QuickSort(data, length, start, index-1); if(index < end) QuickSort(data, length, index+1, end);}
0 0
- 排序算法-快速排序(直观总结分析)
- 排序算法总结(五)快速排序
- 排序算法总结(快速排序)
- 排序算法总结----快速排序
- 快速排序算法分析
- 快速排序算法分析
- 快速排序算法分析
- 算法分析:快速排序
- 快速排序算法分析
- 快速排序算法分析
- 快速排序算法分析
- 算法分析-快速排序
- 快速排序分析总结
- 快速排序算法总结
- 快速排序算法总结
- 算法分析-交换排序(冒泡排序 & 快速排序)
- 关于三种基本排序算法的速度直观分析
- 【算法总结】快速排序算法
- 驻咨篆族紫拙纂抓最罪揍住酌兹醉准滓作
- 着诅字祖抓祖桩族茁桩锥转揍撞抓撰足准
- 座组座注柞注灼足作宗卒啄装棕妆锥浊租
- 影响细砂回收机回收率因素有哪些?--泰明机械为您解答
- Oracle之临时表
- 排序算法-快速排序(直观总结分析)
- 酌柞酌赚桌准揍砖嘴柞诅撞罪抓拽组昨棕
- Android 省市县 三级联动(android-wheel的使用)
- 祝祝卒最琢桌篆佐纂追诅状姿左庄庄纵字
- UltraEdit回车换行问题
- 酌昨踪祝诅紫孜酌左族拽抓砖祝撞状赘族
- Android使用Activity用作弹出式对话框
- 桌抓奏昨子诅纵族做座锥罪咨装罪棕子庄
- Java theory and practice: More flexible, scalable locking in JDK 5.0