`
kenby
  • 浏览: 716846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

快速排序 顺序统计量 数组分割

 
阅读更多
#include <stdio.h>
#include <string.h>

#define N 2578 

void swap(int *p, int *q)
{
	int		tmp;

	tmp = *p;
	*p = *q;
	*q = tmp;
}

int partition(int *a, int s, int t)
{
    int pv = a[t];

    while(s < t) {
        for (; s < t && a[s] < pv; s++);
        swap(a+s, a+t);
        for (; t > s && a[t] > pv; t--);
        swap(a+t, a+s);
    }

    return s;
}

/* 选择数组中第i大的元素并返回 */
int quick_select(int *a, int s, int t, int i)
{
	int		p, m;

	if (s == t) return a[t];
	p = partition(a, s, t);	/* 用a[t]分割数组 */
	m = p - s + 1;			/* m是a[t]在小组内的排名 */
	if (m == i) return a[p];
	if (m > i) {
		return quick_select(a, s, p-1, i);
	}
	return quick_select(a, p+1, t, i-m);
}

void quick_sort(int *a, int s, int t)
{
	int 	p;

	if (s < t) {
		p = partition(a, s, t);
		quick_sort(a, s, p-1);
		quick_sort(a, p+1, t);
	}
}

int main()
{
	int	i;
	int a[N+1];

	for (i = 0; i <= N; i++) {
		a[i] = N-i;
	}
	quick_sort(a, 0, N);

	printf("第%d大的数为%d\n", 2, quick_select(a, 0, N, 2));

	return 0;
}
分享到:
评论

相关推荐

    计算机二级公共基础知识

    下一节排序中,有序的含义也是如此。 对于长度为n的有序线性表,利用二分法查找元素X的过程如下: 步骤1:将X与线性表的中间项比较; 步骤2:如果X的值与中间项的值相等,则查找成功,结束查找; 步骤3:如果X小于...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例052 使用快速排序法 64 实例053 使用直接插入法 65 实例054 使用sort方法对数组进行排序 67 实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名 69 实例057 用List集合传递...

    c语言经典案例

    实例022 快速排序 27 实例023 选择排序 28 实例024 归并排序 29 实例025 二分查找 31 实例026 分块查找 32 实例027 哈希查找 34 实例028 斐波那契数列 37 实例029 哥德巴赫猜想 38 实例030 尼科彻斯定理 39 第4章 ...

    C程序范例宝典(基础代码详解)

    实例131 快速排序 195 实例132 选择排序 197 实例133 归并排序 198 4.3 查找算法 199 实例134 顺序查找 199 实例135 二分查找 201 实例136 分块查找 202 实例137 哈希查找 203 4.4 定理与猜想 206...

    PHP和MySQL WEB开发(第4版)

    3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件...

    PHP和MySQL Web开发第4版pdf以及源码

    3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能...

    PHP和MySQL Web开发第4版

    3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能...

    计算机二级C语言考试题预测

    快速排序 D. 归并排序 (55) 在设计程序时,应采纳的原则之一是(A) 注:和设计风格有关 A. 程序结构应有助于读者理解 B. 不限制goto语句的使用 C. 减少或取消注解行 D. 程序越短越好 (56) 下列不属于软件调试技术的...

    C#编程经验技巧宝典

    43 &lt;br&gt;0061 树的实现 44 &lt;br&gt;3.2 排序 48 &lt;br&gt;0062 如何实现选择排序算法 48 &lt;br&gt;0063 如何实现冒泡排序算法 49 &lt;br&gt;0064 如何实现快速排序算法 50 &lt;br&gt;0065 如何实现插入排序算法 ...

    最新Java面试宝典pdf版

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    Java面试笔试资料大全

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    Java面试宝典2010版

    用JAVA实现一个快速排序。 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 三. html&JavaScript&ajax部分 1...

    Java面试宝典-经典

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    JAVA面试宝典2010

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    java面试题大全(2012版)

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;...

    java面试宝典2012

    用JAVA实现一个快速排序。 86 11、有数组a[n],用java代码将数组元素顺序颠倒 87 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 88 三. html&JavaScript;&ajax;...

Global site tag (gtag.js) - Google Analytics