举例: 154 423 365 251 78 92 640 -------------------------------------- (第一轮)(10的0次方 位即个位)640 251 92 423 154 365 78 (第二轮)(10的1次方 位即十位)423 640 251 154 365 78 92 (第三轮)(10的2次方 位即百位)78 92 154 251 365 423 640 //基数排序需要用到桶 [][][][][][][][][][] [][][][][][][][][][] [][][][][][][][][][] [][][][][][][][][][] [][][][][][][][][][] [][][][][][][][][][] [][][][][][][][][][] 0 1 2 3 4 5 6 7 8 9 int temp[10][N]; //先从个位开始选择放入桶中,随后从十位,百位...依次放入桶内 void redixSort(int arr[],int length){ int i; int j; //将对应数的放入对应的桶内,再丢回原来的数组中,就进行了一次排序 for(int k=10;k<10000;k*=10){ for(int i=0;i<length;i++){ int j=0; int pos=(arr[i]%k)/(k/10); while(temp[pos][j]) j++;//找到该通内无元素的位置; temp[pos][j]=arr[i];//将arr[i]放入没有元素的位置 } pos=0; for(i=0;i<10;i++){//因为有10个桶 for(j=0;j<length&&temp[i][j]!=0,j++){ arr[pos++]=temp[i][j]; temp[i][j]=0;//数值拿到原数组后,将桶还原为0 //若等于0,则后面没有元素,直接退出 } } } }
//定义10个桶 从0到9 //根据数从位数开始,从小到大放入十个桶中,位数也从低到高,将所有位数都遍历过之后,就已经排序好了