排序算法一:桶排序

  在我们的生活的这个世界到处都是被排序过的东西。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……可以说排序无处不在。今天简单讲讲最快最简单的排序——桶排序。

  尝试一下输入n个0~1000之间的整数,将它们从大到小排序。

代码实现如下:

#include <stdio.h>
int main() {
	//桶排序
	//先确定变量
	//赋初始值
	//循环输入数值
	//循环输出数值
	printf("桶排序\n");
	int book[1001], i, j, t, n;
	for (i = 0; i <= 1000; i++)
		book[i] = 0;            //初始化为0
	printf("请输入数值个数:");
	scanf("%d", &n);
	for (i = 1; i <= n;i++) {       //循环输入n个数
		printf("第%d个数:",i);
		scanf("%d", &t);        //把每个数读到变量t中
		book[t]++;              //进行计数
	}
	printf("排序结果:\n");
	for (i = 1000; i >= 0; i--)                //依次判断编号1000~0的桶
		for (j = 1; j <= book[i]; j++)     //出现了几次就将桶的编号打印几次
			printf("%d\t",i);
	getchar();        //用来暂停程序,以便查看程序输出的内容
	getchar();
	return 0;
}

输入以下数据进行验证:

10

8 100 50 22 15 6 1 1000 999 0

运行结果是:

时间: 2024-12-30 00:00:37

排序算法一:桶排序的相关文章

排序算法下——桶排序、计数排序和基数排序

桶排序.计数排序和基数排序这三种算法的时间复杂度都为 $O(n)$,因此,它们也被叫作线性排序(Linear Sort).之所以能做到线性,是因为这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作. 1. 桶排序(Bucket Sort)? 1.1. 桶排序原理 桶排序,顾名思义,要用到"桶".核心思想是将要排序的数据分到几个有序的桶里,每个桶的数据再单独进行排序.桶内排完序后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了. 1.2. 桶排序的时间复杂度分析 如

最快最简单的排序算法:桶排序

在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个同学分别考了5分.3分.5分.2分和8分,哎考的真是惨不忍睹(满分是10分).接下来将分数进行从大到小排序,排序后是8

排序算法之——桶排序

这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有限个桶中,再对每个桶中的数据进行排序,可以说是鸽巢排序的一种归纳结果(对每个桶中数据的排序可以是桶排序的递归,或其他算法,在桶中数据较少的时候用插入排序最为理想). 2.算法效率: 对N个数据进行桶排序的时间复杂度分为两部分: 1.对每一个数据进行映射函数的计算(映射函数确定了数据将被分到哪个桶),

排序算法 之 桶排序

桶排序是一种效率很高的排序算法,它的时间复杂度为O(n),但桶排序有一定的限制,只有当待排序序列的元素为0到某一确定取值范围的整数时才适用,典型的例子比如成绩的排序等. 算法思想: 设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列,把待排序序列中元素的值作为临时数组的下标,找出临时数组中对应该下标的元素使之+1:然后遍历临时数组,把临时数组中元素大于0的下标作为值按次序依次填入待排序数组,元素的值作为重复填入该下标的次数,遍历完成则排序结

排序算法之桶排序

一.原理 桶排序是计数排序的升级版,如果计数排序中数的范围比较大呢?之前的计数排序数字范围是1-200,假如1-20000呢?利用桶排序就可以对其进行优化. 步骤: (1)将元素分在不同的桶中 (2)在对每一个桶中的元素进行排序 桶排序的的快慢取决于数据的分布: 当输入的数据可以均匀的分配到每一个桶中,排序最快 当输入的数据被分配到了同一个桶中,排序最慢 关键点: 每一个桶中有多少个数 每一个数应该放到哪一个桶中 二.实现 def binSort(li,min_num,max_num,bin_n

排序算法一:插入排序(Insertion sort)

最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根据结果对算法性能有个直观了解.本篇先说插入排序(insertion sort). (一)算法实现 1 protected void sort(int[] toSort) { 2 if (toSort.length <= 1) { 3 return; 4 } 5 for (int i = 1; i <

排序算法一:直接插入排序

一.算法特性 <一>基本思想: 1.就是将某个元素插入到正确的位置: 2.基本过程:做这样的前提,插入第i个元素时,前i-1个元素都是有序的.因此将A[i]插入到这个有序队列的合适位置,保证:A[n-1] < A[i] <A[n+1];此时就添加进了新元素,并且保证了整个数组是有序的. 3.时间复杂度:T(n) = O(n^2); 二.代码 class InsertSort{ public static void inserSort(int[] A){ int len = A.le

啊哈!算法 学习1 排序 - 简单的桶排序

//排序10个0-100之间数字 //定义int数组 //这里生成包含101个个数数组是以为要对应输入的值 到对应到数组的index 譬如输入10 对应a[10] int a[101]; //数组赋值 生成 for (int i = 0; i < 101; i++) { a[i] = 0; } //声明变量 int x; //循环输入10个数字 for (int i = 0; i < 10; i++) { //读取输入值 scanf("%d",&x); //输入值对

基数排序与桶排序,计数排序【详解】

桶排序简单入门篇^-^ 在我们生活的这个世界中到处都是被排序过的东东.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个同学分别考了5分.3分.5分.2分和8分,哎,考得真是惨不忍睹(满分是10分).接下来将分