本文主要是介绍算法复习--------------箱子排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例子:
在一个链表中,每个节点包含一个名字和分数,然后需要按照分数来进行排序然后进行输出,这里就可以用到箱子排序
首先得到最大数和最小数之间的数目个数:
maxNum-MinNum
然后创建一个数组(链表)指针来分别保存这几个数的内容
比如:
分数为0的有: 张三,李四,王五
分数为1的有:贺6
分数为2的有:李七
就用3个链表(数组)指针来保存他们的信息
然后在分别对分数0,1, 2中的人取出来,放到一个新的对象指针中,这个链表指针中存在的元素就是已经排好序的了。
采用数组指针实现的算法如下:
// TheBoxSort.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include<iostream>
#include<algorithm>using namespace std;int main(){int data[] = { 7, 11, 12, 3, 4, 9, 77, 2, 33, 4, 7, 10, 88, 101, 78, 13, 34, 25, 58, 8, 9 };int max = *(max_element(data, data + sizeof(data) / sizeof(data[0])));int min = *(min_element(data, data + sizeof(data) / sizeof(data[0])));int *Order = new int[max - min + 1];for (int i = 0; i < max - min + 1; i++){Order[i] = 0;}for (int i = 0; i < sizeof(data) / sizeof(data[0]); i++){Order[data[i] - min]++;}for (int i = 0; i < max - min + 1; i++){if (0 == Order[i]) continue;for (int j = 0; j < Order[i]; j++){cout << i + min << " ";}}cout << endl;getchar();getchar();}
源码的实现来自博客:http://m.blog.csdn.net/blog/u011390632/38689223
这篇关于算法复习--------------箱子排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!