quick sort 的c++实现
来源:互联网 发布:指纹考勤机数据恢复 编辑:程序博客网 时间:2024/06/03 05:18
我直接把代码贴出来了,晕,我发了一遍怎么突然博客就没了,刚开始还不太熟悉
进入正题:我实现的是三向切分的快速排序,和采用随机切分点,这么做有几个好处,一个是对于重复元素很多的数组有很好的性质,可以从代码中看到重复的元素并不执行交换操作,考虑一个极端条件,数组全是{1,1,1,1…1},可以看到只用遍历一次数组就可以了,是O(N)时间复杂度。使用随机切分点的好处是使得最坏条件出现的几率大大大幅度下降,比如每次都取得最小值或者最大值。
.h/*author : ybtime: 2016 12 2edition: 1.0describe:快速排序的实现*/class Cquick{public: Cquick(); Cquick(int n); void exchange(int i , int j); void quickSort(int lo,int ed); //void partition(int lo, int ed); void show();private: int *a; int Num;};.cpp/*author : ybtime: 2016 12 2edition: 1.0describe:快速排序的实现*/#include "quick.h"#include <iostream>#include <stdio.h>using namespace std;Cquick::Cquick(int n):Num(n){ a = new int[n]; for (int i = 0 ; i<n;i++) { a[i] = rand()%100; }}void Cquick::exchange(int i , int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp;}void Cquick::quickSort(int lo , int ed)//出现个问题,晕晕乎乎的,第一:迭代没写返回条件{ // 第二:在切分时,边界条件没搞清楚 int k = rand()%(Num-1); int val = a[k]; //cout<<"K:"<<k<<endl; int i = lo; int it = lo; int j = ed; if (lo >= ed) { return; } while (i <= j) { if (a[i] < val) { if (i != it)//i和it不相等的时候才交换,将小于val的值交换到it左边 { exchange(i , it); } i++; it++; } else if (a[i] > val) { exchange(i ,j); j--; } else { i++; } } quickSort(lo , it - 1 ); quickSort(i , ed);}void Cquick::show(){ for (int i = 0;i<Num;i++) { cout<<a[i]<<" "; }}void main(){ Cquick myquick(20); myquick.show(); cout<<endl<<"after quick sort:"<<endl; myquick.quickSort(0,19); myquick.show();}
0 0
- 泛型,Quick Sort 的C/C++两种实现方式
- Quick Sort的Java实现
- quick sort 的c++实现
- quick sort 的c++实现
- 快速排序的PHP实现 Quick Sort
- quick sort 的C++正确实现
- quick sort 算法 的C++实现
- newlisp实现quick sort
- Quick Sort (快速排序 C++)
- C program for quick sort
- C/C++ Quick Sort Algorithm
- 快速排序(quick sort) C ~
- quick sort 简单C++实现
- Quick Sort 快速排序的原理及实现
- Another C program for quick sort
- C++: quick sort(快排序)
- 图解排序算法及C语言实现之 ------ 快速排序:Quick Sort
- 排序算法C/C++实现_快速排序(Quick Sort)
- yum的配置文件yum.conf详解
- 在控制台输入数组并遍历数组
- POJ 1109 Index Generation 已被翻译
- vim 折叠
- golang---函数定义与方法定义的区别
- quick sort 的c++实现
- java和Dalvik的运行差异
- 运行时测试断言
- 就近原则
- 学习hibernate过程中,自己整理的一些数据,但不全面。
- 安卓UI基础--dp sp px解析
- .NET日期时间处理
- Tensorflow实现卷积神经网络
- NYOJ 499 迷宫(DFS)