手写快速排序【随机数作基数】
2014-11-02 15:49
155 查看
/* ID: j.sure.1 PROG: LANG: C++ */ /****************************************/ #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <stack> #include <queue> #include <vector> #include <map> #include <string> #include <climits> #include <iostream> #define LL long long using namespace std; const int INF = 0x3f3f3f3f; /****************************************/ int part(int *a, int l, int r) { srand(time(0)); int i = int(rand() % (r-l+1) + l);//取l~r随机数 int key = a[i]; a[i] = a[l]; //现在key是基数,a[l]留作安放键值 while(l < r) { while(l < r && a[r] >= key) r--; a[l] = a[r];//自右向左找到第一个小于基数的,安放在a[l] while(l < r && a[l] <= key) l++; a[r] = a[l];//自左向右找到第一个大于基数的,安放在a[r] } a[l] = key;//此时l==r,key左边的值都比它小,右边都比它大 return l; } void Qsort(int *a, int l, int r) { if(l < r) { int m = part(a, l, r); Qsort(a, l, m-1); Qsort(a, m+1, r); } } int main() { int a[7]; for(int i = 0; i < 6; i++) { scanf("%d", &a[i]); } Qsort(a, 0, 5); for(int i = 0; i < 6; i++) { printf("%d ", a[i]); } return 0; }
相关文章推荐
- 算法导论之排序:快速排序、归并排序、计数排序、基数排序、桶排序
- C++算法 冒泡排序,快速排序,插入排序,希尔排序,计数排序,基数排序 性能比较
- 排序算法系列-堆排序-快速排序-基数排序-简单选择排序-归并排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 排序算法之基数排序,随机数的产生和程序运行时间的计算
- 快速排序,插入排序,归并排序,计数排序,基数排序,堆排序
- Quicksort 快速排序—注意点以及代码实现(笔试手写代码)
- 手写快速排序
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)
- 九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序.堆排序
- 【更新】排序算法比较:插入排序,冒泡排序,归并排序,堆排序,快速排序,计数排序,基数排序,桶排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 排序算法(插入排序、shell排序、冒泡排序、选择排序、合并排序、堆排序、快速排序、计数排序、基数排序、桶排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- (让我把右小指敲进键盘的)手写随机版快速排序模板
- 快速排序的一些实现技巧(曾经被手写快排打倒过n+1次。。。)
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序