例子:
在一个链表中,每个节点包含一个名字和分数,然后需要按照分数来进行排序然后进行输出,这里就可以用到箱子排序
首先得到最大数和最小数之间的数目个数:
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