大家好,我是贤弟!
一、什么是鸽巢排序算法?
鸽巢排序算法也称为桶排序,是一种简单的排序算法。
它的原理是将待排序的元素分配到二维数组中(鸟巢),然后按照每个鸟巢中的元素值的大小顺序依次取出。
二、鸽巢排序算法的步骤
具体步骤如下:
1、建立一个二维数组(鸟巢),其行数等于待排序元素中的最大值。
2、遍历待排序的数组,将每个元素插入到对应的鸟巢中,即将元素值相同的放在同一个鸟巢中。
3、对每个鸟巢内部进行排序。
4、按照行号从小到大的顺序,依次将每个鸟巢中的元素取出,形成有序序列。
三、以下是用C语言实现鸽巢排序算法的代码:
void pigeonhole_sort(int arr[], int n) { // 找出最大值和最小值 int min = arr[0], max = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] < min) { min = arr[i]; } else if (arr[i] > max) { max = arr[i]; } }
// 根据最大值和最小值创建鸟巢 int size = max - min + 1; int* holes = (int*)calloc(size, sizeof(int));
// 将元素分配到鸟巢中 for (int i = 0; i < n; i++) { holes[arr[i] - min]++; }
// 按照行号从小到大依次取出鸟巢中的元素形成有序序列 int index = 0; for (int i = 0; i < size; i++) { while (holes[i] > 0) { arr[index++] = i + min; holes[i]--; } }}
领取专属 10元无门槛券
私享最新 技术干货