急求:用C语言编写以下有关排序的程序!

liu633lss 2010-05-28 08:00:36
桶式排序从需要进行排序的正整数的一维数组开始,而且有一个整数的二维数组,其中行下标从0——9,而列下标从0——n,n为要进行排序的数组中值的数目。二维数组的每行称为一个桶。编写一个函数bucketsor,他用整数数组和数组大小作为参数。
算法如下:
1) 在一维数组内循环,并根据他的各位将每个值安排在桶数组的某行。如,97安排在行7,3安排在行3,100安排在行0
2) 在桶数组内循环,并将值复制回到最初的数组。上面的数值在一维数组中的新顺序是100,3.,97
3) 对每个后面的数位(十位,百位,千位等等)重复这个过程。

在对数组进行第2轮处理时,,100安排在行0,3安排在行0(他只有一位),而97安排在行9.,一维数组中的值的顺序是100,3,97.第三轮。100安排在行1,3安排在行0,而97安排在行0(在3的后面)。桶式排序可以确保在处理了最大数字的最高位之后正确排列所有值的顺序。当所有都复制到二维数组的行0时,桶式排序就结束了。注意桶的二维数组的大小是要排序数组大小的10倍。
...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu633lss 2010-06-05
  • 打赏
  • 举报
回复
#include <stdio.h>
#define SIZE 10

void bucketSort (int b[], int size);

int main( void )
{
/* initialize a */
int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
int pass; /* passes counter */
int i; /* comparisons counter */
int hold; /* temporary location used to swap array elements */

printf( "Data items in original order\n" );

/* output original array */
for ( i = 0; i < SIZE; i++ ) {
printf( "%4d", a[ i ] );
}

bucketSort (a, SIZE);

printf( "\nData items in ascending order\n" );

/* output sorted array */
for ( i = 0; i < SIZE; i++ ) {
printf( "%4d", a[ i ] );
} /* end for */

printf( "\n" );

return 0;

}

void bucketSort (int b[], int size)
{
int c[10][SIZE] = {{0},{0}};
int d, i, j, h = 1, g = 1, f, k, largest = 0;

for (i = 0; i < size; i++){
if (b[i] > largest ){
largest = b[i];
}
}

while (largest != 0){
h++;
largest /= 10;
}

for (f = 0; f <= h; f++){
g *= 10;
for (i = 0; i < size; i++){
d = (b[i] % g - b[i] % (g /10))/ (g/ 10);
c[d][i] = b[i];
}
for (j = 0,k = 0; j < size; j++){
for (i = 0; i < size; i++){
if(c[j][i] != 0){
b[k] = c[j][i];
k++;
c[j][i] = 0;
}
}
}
}
}
liu633lss 2010-05-29
  • 打赏
  • 举报
回复
我自己写的,但结果错误!

#include <stdio.h>
#define SIZE 10

void bucketSort (int b[], int size);

int main()
{
int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
int pass, i;

printf( "Data items in original order\n" );

for ( i = 0; i < SIZE; i++ ) {
printf( "%4d", a[ i ] );
}

bucketSort(a, SIZE);

printf( "\nData items in ascending order\n" );


for ( i = 0; i < SIZE; i++ ) {
printf( "%4d", a[ i ] );
}

printf( "\n" );

return 0;

}

void bucketSort (int b[], int size)
{

int d, h, i, j,g = 1, f,k = 0, largest = 0;
int c[10][10] = {0};


for (i = 0; i < size; i++){
if (b[i] > largest){
largest = b[i];
}
}

whlie (largest != 0){
++h;
largest /= 10;
}

for (f =0, f <= h; f++){
g *= 10;

for (i = 0; i < 10; i++){
d = (b[i] % g - b[i] % (g / 10)) / (g / 10);
c[d][i] = b[i];
}

for (j = 0; j < 10; j++){
for (i = 0; i < 10; i++){
if (c[j][i] != 0){
b[k] = c[j][i];
k++;
c[j][i] = 0;
}
}
}
}

}
liu633lss 2010-05-28
  • 打赏
  • 举报
回复
那等于没写嘛![Quote=引用 2 楼 liu633lss 的回复:]
怎么不继续写下去呀?
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wade_2003 的回复:]
C/C++ code
int bucketsor(int **P,int n)
{

};
int main()
{
int a[][]={0};
return 0;
}
[/Quote]

这样就行了啊,难道要他给你做完?
liu633lss 2010-05-28
  • 打赏
  • 举报
回复
怎么不继续写下去呀?
wade_2003 2010-05-28
  • 打赏
  • 举报
回复
int bucketsor(int **P,int n)
{

};
int main()
{
int a[][]={0};
return 0;
}

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧