【原创】快速排序
来源:互联网 发布:前段优化 编辑:程序博客网 时间:2024/05/22 12:20
今天参加新浪微博的笔试,遇到了一道算法题,写出快速排序的源代码。好久没写排序的代码了,自己重新写了一份,与大家分享。
在程序中,写了几个辅助函数,一个是用来初始化带排序数组的,一个是用来打印数组的。好了,废话不多说了,见代码:
首先定义一个头文件。
1: //QuickSort.h
2: #include <iostream>3: #include <ctime>4: using namespace std;5:6: //生成随机数数组
7: void createArray(int data[],int length);8: //划分规则区域
9: int partition(int data[],int low, int high);10: //快速排序
11: void quickSort(int data[],int low, int high);12: //打印数组
13: void print(int data[],int length);14:15:
然后实现这些函数。
1: //QuickSort.cpp
2: #include "QuickSort.h"
3:4: void createArray(int data[],int length)5: {6: srand(time(0));7: for (int i=0;i<length;++i)8: {9: data[i]=rand()%length+1;10: }11: }12:13: int partition(int data[],int low, int high)14: {15: int temp=data[high];
16: while(low<high)
17: {18: while(low<high&&data[low]<=temp)++low;
19: data[high]=data[low];20: while(low<high&&data[high]>=temp)--high;
21: data[low]=data[high];22: }23: data[low]=temp;24: return low;
25: }26:27: void quickSort(int data[],int low, int high)28: {29: int middle=0;
30: if (low<high)
31: {32: middle=partition(data,low,high);33: if(middle!=0||middle!=1)
34: quickSort(data,low,middle-1);35: if(middle!=high-1||middle!=high-2)
36: quickSort(data,middle+1,high);37: }38: }39:40: void print(int data[],int length)41: {42: for (int i=0;i<length;++i)43: {44: cout<<data[i]<<" ";
45: }46: cout<<endl;47: }
最后在主函数中执行快速排序。
1: //main.cpp
2: #include "QuickSort.h"
3:4: int main()
5: {6: cout<<"Enter the length of the array:";
7: int length=0;
8: cin>>length;9: int *data=new int[length];10: createArray(data,length);11: print(data,length);12: quickSort(data,0, length-1);13: print(data,length);14: return 0;
15: }16:17:
在实现快速排序时,时间复杂度为O(nlogn),空间复杂度为O(1),因为只使用了一个临时变量temp。为了方便,这个快速排序是使用递归方法实现的。体到递归,我们就应该想到递归的弊端。因为使用递归会不断的函数信息压入栈中,而栈的空间是有限的,所有如果递归层数过大,函数会出现错误,所有最好还是用非递归方法实现快速排序。本算法的另一个优化方法是如何更好地确定关键哨兵的位置。上面的方法是每次使用对应空间的最右端的值作为哨兵,但是这样出现问题,就是我的运气很差,每次选择的哨兵不是最小值,就是最大值。所以如果能在选择哨兵上优化一下,算法还是可以更优的运行。
好了,今天先写到这吧,如果有问题,欢迎指正。
0 0
- 快速排序(原创)
- 【原创】快速排序
- 原创:快速排序的实现
- [数据结构]原创!amor详解 快速排序 使用以及心得
- 原创排序算法与快速排序算法时间复杂度相同,但更易理解(C++语言实现)
- (原创)选择排序与快速排序及D&C算法的延伸
- 某人原创的排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- C++之类的构造与析构(二)
- rest 调用有参数接口
- C++之类的构造与析构(三)
- OpenCV学习记录之摄像头调用
- mybatise 应用
- 【原创】快速排序
- 百科知识-这些知识你知道吗(3)
- 拦截器filter在rest客户端织入token
- 百科知识-这些知识你知道吗(4)
- get post 都可以实现相互功能,只是组织形式,优缺点不同
- PendingIntent与Intent的区别
- Android 获取屏幕尺寸与密度
- 【原创】ubuntu9.04下gosa的安装与配置
- 前端学习的小笔记——CSS