#includeiostream
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站與策劃設(shè)計(jì),阿拉爾網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:阿拉爾等地區(qū)。阿拉爾做網(wǎng)站價(jià)格咨詢:18980820575
using?namespace?std;
void?Sort(int?a[],int?n);
int?main()
{
int?i,n,a[1001];
cinn;
for(i=1;i=n;i++)
cina[i];
Sort(a,n);
for(i=1;i=n;i++)
couta[i]"?";
system("pause");
return?0;
}
void?Sort(int?a[],int?n)
{
int?i,j,x,flag;
for(i=1;i=n;i++)
{
flag=0;
for(j=1;j=n-i;j++)??
if(a[j+1]a[j])
{???
flag=1;
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
if(flag==0)
break;??????
}
}
【注意】上面那個(gè)數(shù)組下標(biāo)是從1開始的,本人習(xí)慣從1開始
還有一種超好的排序方法,我一直用它:
#includeiostream
#includealgorithm
using?namespace?std;
int?main()
{
int?n,i,a[10001];
cinn;
for(i=1;i=n;i++)
cina[i];
sort(a+1,a+n+1);//默認(rèn)是升序
for(i=1;i=n;i++)
couta[i]"?";
system("pause");
return?0;
}
你說的嵌套定義和調(diào)用是什么意思?
2.應(yīng)該是 swap 吧?假如你用的是局部變量,那函數(shù)調(diào)換的就是局部變量,這時(shí)傳遞進(jìn)來的參數(shù)就沒有被交換了。除了用全局變量,還可以用指針。
3.都是值傳遞,數(shù)組傳遞的是第一個(gè)元素的指針。
實(shí)參是形參的拷貝
實(shí)參的值改變不影響形參
#include stdio.h
void exch(int *a,int *b)
{
int temp;
temp =*a;
*a=*b;
*b=temp;
}
void comexch(int *m,int *n)
{
if(*m*n)
exch(m,n);
}
void main()
{
int i,a[10];
printf("please input 10 numbers:");
for(i=0;i10;i++)
scanf("%d",a[i]);
for(i=0;i10;i++)
printf("%d\n",a[i]);
int j,k,temp;
for(j=0;j10;j++)
{
for(k=10;kj;k--)
comexch(a[k-1],a[j]);
}
printf("\n結(jié)果為:\n");
for(k=0;k10;k++)
printf("%d\n",a[k]);
}
#includestdio.h
#includestdlib.h
void mao_pao(int *a,int n)
{
int i,j,temp,flag;
for(i=0;in-1flag;++i)
{
flag=0;
for(j=0;jn-1;++j)
{
if(a[j]a[j+1])
{
flag=1;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void main()
{
int *a,i,n;
a=(int *)malloc(100);
if(NULL==a)
{
printf("allocation failture\n");
exit(1);
}
printf("請(qǐng)輸入你要排序的元素的個(gè)數(shù)\n");
scanf("%d",n);
printf("現(xiàn)在開始輸入%d個(gè)元素\n",n);
for(i=0;i!=n;++i)
scanf("%d",a[i]);
mao_pao(a,n);
printf("排序后為:\n");
for(i=0;i!=n;++i)
printf("%d ",a[i]);
printf("\n");
free(a);
}
這是排數(shù)字的,要排字母的話,只需把a(bǔ)的類型改一下,和輸出輸入的格式改一下就ok了
1、打開Visual stdio 2019軟件新建空白c文件,在源文件處右擊鼠標(biāo),選擇添加下面的新建項(xiàng),此時(shí)會(huì)彈出窗口:
2、彈出的窗口選擇C++文件,將文件擴(kuò)展名改為“.c”點(diǎn)擊添加完成新建c文件,之后就可以編寫程序了:
3、接下來就可以編寫程序了,首先最前面的部分為輸入數(shù)字的部分,之后的程序會(huì)對(duì)用戶輸入的數(shù)字就行排序,最后則是將結(jié)果打印出來。冒泡排序需要用到兩層循環(huán),第一層循環(huán)遍歷數(shù)組中的元素,第二層則進(jìn)行兩兩比較,如果順序不對(duì)就要對(duì)其進(jìn)行換位,直到排序完成:
4、最后執(zhí)行程序觀察結(jié)果,按下crtl+F5彈出程序,隨意輸入10個(gè)數(shù),按下回車鍵執(zhí)行結(jié)果,此時(shí)就可以看到排序后的結(jié)果了。以上就是c語言冒泡排序程序的演示:
冒泡法排序函數(shù)如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共進(jìn)行n-1輪*/
for(j=0;jn-1-i;j++)/*每輪在前n-i個(gè)數(shù)中比較*/
if(a[j]a[j+1]) /*若相鄰元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交換*/
}
void sort(int *a, int left, int right)
{
if(left = right)/*如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個(gè)組了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在當(dāng)組內(nèi)尋找一遍*/
{
while(i j key = a[j])
/*而尋找結(jié)束的條件就是,1,找到一個(gè)小于或者大于key的數(shù)(大于或小于取決于你想升
序還是降序)2,沒有符合條件1的,并且i與j的大小沒有反轉(zhuǎn)*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個(gè)這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
a[left],那么就是給key)*/
while(i j key = a[i])
/*這是i在當(dāng)組內(nèi)向前尋找,同上,不過注意與key的大小關(guān)系停止循環(huán)和上面相反,
因?yàn)榕判蛩枷胧前褦?shù)往兩邊扔,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
sort(a, left, i - 1);/*最后用同樣的方式對(duì)分出來的左邊的小組進(jìn)行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對(duì)分出來的右邊的小組進(jìn)行同上的做法*/
/*當(dāng)然最后可能會(huì)出現(xiàn)很多分左右,直到每一組的i = j 為止*/
}