当前位置:首页 » 编程语言 » c语言为什么排序不行
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言为什么排序不行

发布时间: 2023-03-28 04:12:27

c语言程序排序没成功,它跳过了排序那步,只执行了输入输出

你看下你自己i的值,你这样写的话i的值在排序前就是7了,不满足排序for循环的条件,自然跳过了
稍微改了下就可以了,你看看吧
#include <stdio.h>#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a[8],i,j,k,t;
for(i=0;i<8;i++)
scanf("%d",&a[i]);
for(i=0;i<7;i++){
for(j=i+1;j<8;j++)
{
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<8;i++)
printf("%d\t",a[i]);
return 0;
}

⑵ C语言程序为什么不能实现从小到大排序呢求助啊

#include<stdio.h>
//1.加void返回类型
voidsort(intx[],intn)
{
inta[10],i,j,k,t;
for(i=0;i<n-1;i++)
{
谨斗雀k=i;
//2.关键错误,把x[i]改成x[j],x[j]>x[k]是从大到小排序,x[j]<x[k]是从小到大排序
销御for(j=i+1;j<n;j++)
if(x[j]<x[k])
祥早k=j;
//3.注意:if条件后那个;应该去掉
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
//4.主函数加入int返回值类型,主函数结尾加上return0
intmain()
{
int*p,i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("Theoriginalarray: ");
for(i=0;i<10;i++)
printf("%d,",a[i]);
printf(" ");
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%d",*p);
p++;
}
printf(" ");
return0;
}

详见注释!~

⑶ C语言直接选择排序运行失败

你的选择排序的函数传参,传错了,select_sort(a[8],8);应该是select_sort(a,8);

a[8]在C语言中是数组a的第9个元素,而a数组只有8个元素,所以你传了一个越界的数组元素,因此出运行错误

a在C语言中是数组a的第1个元素的指针,所以可以在函数中访问到整个a数组

还有函数的定义那一句voidselect_sort();应该改成voidselect_sort(inta[],intn);

还有需要把if(min!=i)语句移到for-j循环外面,for-i循环里面

还有把printf("%d",a[i]); 改成printf("%d ",a[i]);每输出一个元素加一个空格

完整的C语言程序如下

#include<stdio.h>

voidselect_sort(inta[],intn);

intmain(){

inti;inta[8];

printf("请输入8个整数,将为您从小到大排序。 ");

for(i=0;i<8;i++){

scanf("%d",&a[i]);

}

select_sort(a,8);

for(i=0;i<8;i++){

printf("%d",a[i]);

}

return0;

}

voidselect_sort(inta[],intn){

inti,j,t,min;

for(i=0;i<n-1;i++){//n-1次排序(移动)

min=i;

for(j=i+1;j<n;j++){//n-i次比较

if(a[min]>a[j])min=j;

}

if(min!=i){//最小值不在i处的情况

t=a[min];

a[min]=a[i];

a[i]=t;

}

}

}

运行结果
请输入8个整数,将为您从小到大排序。
871163543332618
816182633354371

⑷ c语言,冒泡排序法,我的程序为什么不能排序啊

for(k=0;k<9-i;k++)这里出错了,i为10,所以一直没有进行排序
照楼主你的程序,应该改为
for(k=0;k<9-j;k++)
i变为j
修改后
#include<stdio.h>
int main()
{ int a[10];
int i,j,k,t,s;
printf("please enter 10 numbers:");
for(i=0;i<10;i++)
{scanf("%d",&a[i]);}
for(j=0;j<9;j++)
for(k=0;k<9-j;k++)
if(a[k]>a[k+1])
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
for(s=0;s<10;s++)
{printf("%d\n",a[s]);}
return 0;
}

⑸ C语言这样排序字符串错误在哪,为何没能进行排序

  1. j 的枚举条件应该是 j<s-1, 这是不排序的主要原因。

  2. t 被用来交换 a[x] ,t 的大小应该与 a[x] 的大小一致,因此要么 a[17][21], 要么 t[17], 或者其他。

  3. 主体while 循环中没有对n的自减操作,这是一个死循环。

  4. 读入用的do... while循环判断条件用 || 代替 && 可以避免在输入类似AND的字符串时结束。

  5. k是一个冗余变量,本来冗余变量算不上是错误,但你在值的设定时出了点小问题导致排序不能有效工作,干脆删掉。

修改之后如下:(仅供参考)

#include<stdio.h>
#include<string.h>
intmain()
{
intn,i,j,k,s,x;
chara[17][21],t[21];
scanf("%d",&n);
while(n--)
{
printf("START ");
i=0;
do
{
scanf("%s",a[i]);
悄桥i++;
}while(a[i-1][0]!='E'||a[i-1][1]!='N'||a[i-1][2]!='D');
s=i-1;
for(x=0;x<s-1;x++)
{
for(j=x+1;j<s-1;j++)
{
if(strcmp(a[x],a[j])>0)
{
strcpy(t,a[x]);
strcpy(a[x],a[j]);
启槐猛strcpy(a[j],t);
明滑}
}
}
for(x=0;x<s;x++)
printf("%s ",a[x]);
}
}

⑹ c语言 为什么我的这个排序不能实现呢

逻辑问题。
if(p1==p2)
{
t->next=p1;
head=t;
}
这里出现了断层。如果第一次 while(t->hode_date<p1->hode_date&&p1!=NULL)就不成立;
就会出现 p1=p2=head的情况,而且p1->next也就是head->next=NULL;你这里就出现断层了,一个链表一旦断链,又没有存储断链地址,你就链不上了。

⑺ 关于c语言排序的问题,明明编译过了运行时出错,而且与答案一样,什么错误。

把那个循环比较改成
for(j=0;j<3;j++)
for(i=0;i<3-j;i++)
就行了,你循环出春弯缓错了,你那样写是:
第一次排序,比较3次
第二次排序,又比较3次,
第三次排序,还是比较3次,
正确的应该是
第一次排序,比闹袜较3次,
第二次排序,比较2次
第三次排序,比较1次
排序的次数应该跟着比较次数相反的,如排序是1到10,比较就是10到1,懂了扒模吗