快速排序(QuickSort)以及C++随机数的生成
来源:互联网 发布:新机电脑测试软件 编辑:程序博客网 时间:2024/04/28 01:38
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小小的程序方面的考试如软考,考研中也常常出现快速排序的身影。
一、算法思想:
实现快速排序算法的关键在于数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组中的右边。
用递归实现快速排序。
二、算法实现
1、分治函数:
#include "stdafx.h"#include <stdlib.h>#include <exception>// Random Partitionint RandomInRange(int min, int max){ int random = rand() % (max - min + 1) + min; return random;}void Swap(int* num1, int* num2){ int temp = *num1; *num1 = *num2; *num2 = temp;}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);//产生随机数,让避免特殊的数组,使算法更加接近O(nlog n) 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[small]); } } ++ small; Swap(&data[small], &data[end]); return small;}
2。递归实现
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
- 快速排序(QuickSort)以及C++随机数的生成
- 快速排序QuickSort.c
- (C#)快速排序 Quicksort
- 快速排序(QuickSort)C语言版
- QuickSort -- 快速排序(C++)
- QUicKSort 快速排序算法 c实现
- QuickSort - 快速排序算法(C++)
- QuickSort - 快速排序算法(C++)
- 快速排序 QuickSort c语言实现
- 快速排序 & 随机数的生成方法 & 随机快排
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- C++ 快速排序QuickSort的实现
- QuickSort 快速排序的分析与实现
- 链表的QuickSort快速排序法
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- Java 高新技术 7K面试题(交通灯管理系统)
- HDU2063(二分匹配入门模板题)
- CCProgressTime摘要
- "aa".equals(a)这种写法为什么就可以避免空指针。
- leetcode第一刷_Submission Details
- 快速排序(QuickSort)以及C++随机数的生成
- linux expect, spawn用法小记
- C++算符优先级表
- 打开shp数据
- LeetCode | Max Points on a Line
- 无论你的工资多少,都请记住这些
- Linux GCC常用命令
- SQL2005 安装时 “性能监视器计数器要求(错误)” 解决方案
- 自定义控件滚动条操作(一)