快速排序算法
来源:互联网 发布:app软件产品说明书 编辑:程序博客网 时间:2024/06/06 03:24
快速排序算法是目前为止排序算法中教好的一种,时间复杂度为O(n*logn)
下面先简单的写下,以后有时间再更新!欢迎大家的交流!
其思想是:
- 一趟的思想:先在数组中选择一个数字,接下来把数组中的数字分为两个部分,比选择的数字小的数字在数组的左边,比选择的数字大的数字在右边
- 递归的思路分别对于每次选中的数字的左右两边排序
第一步:实现分割的代码:有两种方式,看大家谢欢!
定义的两个指针顺序的朝着同一个方向:
int Partition(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; for (index = start; index < end; ++index){ if(data[index] < data[end]){ ++small; if(small != index) Swap(&data[index], &data[end]); } } ++small; Swap(&data[small], &data[end]); return small;}
int Partition(int data, int length, int start, int end){ if (data == NULL || length <= 0 || start < 0 || end >= length) throw new std::exception("Invalid Parameters"); int pLeft = randomInRange(start, end); Swap(&data[pLeft], &data[end]); pLeft = start -1; int pRight = end; for(;;){ while(data[++pLeft] < data[end]){}; while(data[--pRight] > data[end]){}; if(pLeft < pRight) Swap(&data[pLeft], &data[pRight]); else break; } Swap(&data[pLeft], &datap[end]); return pLeft; }
int middle3(int data, int length, int start, int end){ if (data == NULL || length <= 0 || start < 0 || end >= length) throw new std::exception("Invalid Parameters"); int center = (start+end)/2; if(data[start] > data[center]) Swap(&data[start], &data[center]); if(data[center] > data[end]) Swap(&data[center], &data[end]) if(data[start] > data[center]) Swap(&data[start], &data[center]); Swap(&data[center], &data[end]); //将中间的分割数,交换到数组最后面 }
下面我们可以用递归的思想分别对于每次选中的数字左右两边进行排序。
void QuickSort(int data[], int length, int start, int end){ if(start == end) return; int index Partition(data, length, start, end); if(index > start) QuickSort(data, length, start, index-1); if(index < end) QuickSort(data, length, index+1, end); }
代码可能有地方有问题,后期有时间我会测试修改!
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- leetcode Maximum Depth of Binary python C++
- linux 编译选项中加入-shared 造成执行程序coredump
- matlab图片,矩阵,函数的基本用法
- 循环链表
- ubuntu 使用
- 快速排序算法
- php get_post 提交
- [转载论文]蚁群算法在最优路径上的应用
- The final local variable xxx cannot be assigned, since it is defined in an enclosing type“,
- Android之View篇①
- Android之使用wifi连接adb
- 3D拾取技术
- 关于简历的那些事——记微信内推之无知
- 聚类