當前位置:首頁 » 編程語言 » 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,懂了扒模嗎