排序算法之珠排序
基本思想:将每个数用珠子表示,例如:数字5就是5个珠子。用珠子表示好每一个数后,让所有的珠子自由下落。排序完成。
例如:数字,{6, 2, 4, 1, 5, 9}
(1)将这些数都用珠子表示。
(2)让珠子自由下落。
完成了排序{1, 2, 4, 5, 6, 9}
BOOL BeadSort(datatype *array, int size) { char **bead; int i, j, k, n, len; if(array == NULL) { return FALSE; } //确定每行珠子的最大个数 GetMax(array, size, &len); //初始化 bead = (char **)calloc(size, sizeof(char *)); if(bead == NULL) { return FALSE; } for(i = 0; i < size; i++) { bead[i] = (char *)calloc(len, sizeof(char)); if(bead[i] == NULL) { return FALSE; } } for(i = 0; i < size; i++) { for(j = 0; j < array[i]; j++) { bead[i][j] = 1; } } //初始化完毕,将所有的数按顺序用珠子表示。 //让珠子自由下落 for(j = 0; j < len; j++) { i = k = size-1; while(i >= 0) { if(bead[i--][j] == 1) { bead[k--][j] = 1; } } while(k >= 0) { bead[k--][j] = 0; } } //自由下落完毕 //收集珠子,统计每一行有多少个珠子 for(i = 0; i < size; i++) { j = n = 0; while(j < len) { if(bead[i][j++] == 0) { break; } n++; } array[i] = n; } //排序完成 return TRUE; }
待排序序列:{9, 11, 15, 20, 19, 0, 5, 1, 10, 17, 13, 15, 11, 19, 11, 7, 20, 6, 10}
(1)初始化,用珠子表示数字。
(2)让珠子自由下落
排序完成。{0, 1, 3 ,5 ,6, 7, 9, 10 ,10 , 11, 11, 11, 13, 15, 16, 17, 19, 19, 20, 20}