快速排序(C++版)
来源:互联网 发布:值得推荐的淘宝店铺 编辑:程序博客网 时间:2024/06/14 06:12
A[p,r]进行快速排序的3步分治过程:
1,分解。数组A[p,r]被划分为两个(可能为空的)子数组A[p,q-1]和A[q+1,r],使得A[p,q-1]中的每个元素都小于A[q],而A[q]也小于或者等于A[q+1,r]中的每一个元素。
2,解决。递归调用快速排序,对A[p,q-1]和A[q+1,r]进行排序。
3,合并。因为是原址排序所以不用合并。
C++代码:
/*** name:快速排序* time:15/8/11 15:25* environment: ubuntu 14.04,sublime text 3*/#include <iostream>#include <algorithm>using namespace std;/** 打印数组*/void printArray(int array[],int length){ for (int i = 0; i < length; ++i) { cout << array[i] << endl; }}/** 原址重排*/int partition(int *array,int p,int r){int temp = array[r];int i = p - 1;for (int j = p; j <= r-1; ++j){if(array[j] <= temp){ i = i + 1; //记录比temp小的位置swap(array[j],array[i]); //交换大小}}swap(array[i+1],array[r]); //把temp放在比他小的后面,比他大的前面return i+1; //得到temp这个数在数组中的位置}void quick(int *array,int p,int r){if(p < r){int q = partition(array,p,r);quick(array,p,q-1);quick(array,q+1,r);}}int main(int argc, char const *argv[]){int a[10] = {11,22,21,14,17,33,28,25,19,26};int end = 10 - 1; //数组从0开始,结束位置是9不是10quick(a,0,end);//cout << partition(a,0,9) <<endl;printArray(a,10);return 0;}
在这再补一下:
快速排序的最坏情况下时间复杂度为:O(n^2),而期望时间复杂度是:O(nlgn)。。
0 0
- 快速排序(C++)
- 快速排序(C++)
- 快速排序(c++)
- 快速排序算法实现(C版)
- 快速排序算法(c++)版
- 快速排序(C/C++版)
- 快速排序(c语言版)
- 快速排序(C语言)
- 算法 - 快速排序(C#)
- 快速排序(C语言版)
- 快速排序(C语言)
- QuickSort -- 快速排序(C++)
- 快速排序算法(C)
- 快速排序(C语言)
- 快速排序(C语言)
- 排序算法(C实现)--------- 快速排序
- 排序——快速排序(C++)
- C实例---快速排序(冒泡排序)
- Django 搭建过程记录
- android minSdkVersion和targetSdkVersion含义
- PHP遍历目录下的所有文件
- mousebutton和mousebuttons使用的区别
- ejabberd笔记
- 快速排序(C++版)
- Cashe的使用
- 22-IO流-35-IO流(File对象-常见功能-重命名)
- HDOJ 1879 继续畅通工程(最小生成树)
- Gnuplot 学习笔记
- Go 控制结构
- [LeetCode] Convert Sorted Array to Binary Search Tree
- mySQL 关于bool类型
- JAVA,Play framework 入门,打印hello word