C语言实现----桶排序

42 篇文章 2 订阅
10 篇文章 3 订阅

一、桶排序介绍

桶排序( Bucket Sort )的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组 a 中共有 N 个整数,并且已知数组 a 中数据的范围[0, MAX )。在桶排序时,创建容量为 MAX 的桶数组 r ,并将桶数组元素都初始化为0;将容量为 MAX 的桶数组中的每一个单元都看作一个"桶"。

在排序时,逐个遍历数组 a ,将数组 a 的值,作为"桶数组 r "的下标。当 a 中数据被读取时,就将桶的值加1。例如,读到数组 a [3]=5,则将 r [5]的值+1。

二、通排序图文说明

1. 桶排序代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

// 桶排序
// 
// 参数说明
// a -- 待排序数组
// n -- 数组a的长度
// max -- 数组a中最大值的范围

void Bucket_Sort(int a[], int n, int max) {
	int i, j=0;
	int *buckets = (int*)malloc((max+1)*sizeof(int));
	// 将buckets中的所有数据都初始化为0
	memset(buckets, 0, (max+1) * sizeof(int));
	// 1.计数
	for (i = 0; i < n; i++) {
		buckets[a[i]]++;
		printf("%d : %d\n", a[i], buckets[a[i]]);
	}
	printf("\n");
	// 2.排序
	for (i = 0; i < max+1; i++) {
		while ((buckets[i]--) > 0) {
			a[j++] = i;
		}
	}

}



int main() {
	int arr[] = { 9,5,1,6,2,3,0,4,8,7 };
	Bucket_Sort(arr, 10,9);
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");

	return 0;
}

BucketSort ( a , n , max )是作用是对数组 a 进行桶排序, n 是数组 a 的长度, max 是数组中最大元素所属的范围[0, max )。

假设 a ={8,2,3,4,3,6,6,3,9}, max =10。此时,将数组 a 的所有数据都放需要为0-9的桶中。如下图:

在将数据放到桶中之后,再通过一定的算法,将桶中的数据提出来并转换成有序数组。就得到我们想要的结果了。

三、桶排序算法的稳定性

归并排序是稳定的算法,它满足稳定算法的定义。

算法稳定性:假设在数列中存在 a[i]= a[j] ,若在排序之前, a [i]在 a[j] 前面并且排序之后, a [i]仍然在 a [ j ]前面。则这个排序算法是稳定的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值