关于quick sort
来源:互联网 发布:二维字符串数组 编辑:程序博客网 时间:2024/06/04 08:07
最原始的quick sort就是算法导论上的了:
#include<stdio.h>void swap(int *a, int *b){int tmp = *a;*a = *b;*b = tmp;}int partition(int a[], int s, int e){/*随机取keysrand(time(NULL));int dx = s + rand() % (e - s + 1);swap(&a[dx], &a[e]);*/ int tmp = a[e], mid = s;for(int i = s; i <= e; i++)if(a[i] < tmp)swap(&a[mid++], &a[i]);swap(&a[mid], &a[e]);return mid;}void Qsort(int a[], int s, int e){if(s < e){int p = partition(a, s, e);Qsort(a, s, p - 1);Qsort(a, p + 1, e);}}main(){int nums[10] = {1, -1, 2, -2, -2, -3, 1, 5, 0, 10};Qsort(nums, 0, 9);for(int i = 0; i < 10; i++)printf("%d\n", nums[i]);}至于quick sort各种优化方法与测试,详见这篇文章(找不到原文链接,只能贴百度文库的了):
http://wenku.baidu.com/link?url=wXRMQ-8OowOYvTuLYRYWikM9Ui03LdrFCi2y4zzpsnbD2mq_FtLPFYeCpwE_RfutNGP1nz1nY7yiPAdkz3GAnvJiGPJT2Ew0Ry5WgH9-y7u&qq-pf-to=pcqq.c2c
利用快排思想取第k个位置的数:
int partition(int a[], int s, int e, int k)//注意k是下标,不是第k个,和描述有些差距{int tmp = a[e], mid = s;for(int i = s; i <= e; i++)if(a[i] > tmp)swap(&a[mid++], &a[i]);swap(&a[mid], &a[e]);if(mid == k)return a[mid];else if(mid > k)return partition(a, s, mid - 1, k);elsereturn partition(a, mid + 1, e, k);}//只需要partition和swap,不用写Qsort是第k个位置的所以如果数据不重复可以得出第k大(或小)的数,数据重复的话,师兄说可以用hash表去重,等我研究后了再贴出来。
0 0
- 关于Quick Sort
- 关于quick sort
- 关于快速排序 quick sort
- Quick Sort
- Quick Sort
- quick sort
- quick sort
- quick sort
- Quick Sort
- Quick Sort
- quick sort
- Quick Sort
- Quick Sort
- Quick Sort
- Quick Sort
- Quick Sort
- Quick Sort
- Quick Sort
- STDIN_FILENO的作用及与stdin 的区别
- 两个forEach 外层循环一次内层也相应循环一次的实现
- linux常用编程工具之gcc、make简介
- Android开发之切换activity动画overridePendingTransition
- 查找CSS错误的完整步骤
- 关于quick sort
- JNI_OnLoad returned bad version (-1) 问题解决 proguard
- struts标签+jstl标签之国际化实例
- vector的reserve和resize
- 费氏数列
- 表单的js验证框架,只提供提示信息及正则表达式即可自动验证及提示
- asi上传图片
- 黑马程序员_API集合框架
- Mahout 中文分类 (2)