void del(int *a,int n)//冒泡
創(chuàng)新互聯(lián)建站成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元貢井做網(wǎng)站,已為上家服務(wù),為貢井各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
{
int i,j,k;
for(i=0;i=n-2;i++)
for(j=0;j=n-2-i;j++)
{ if(a[j]a[j+1])//如果你要從大到小排序就改為
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
for( k=0;kn;k++)
printf("%d\t",a[k]);
printf("\n");
}
按照樓主要求更改后的函數(shù)
選擇排序:
void select_sort(int a[],int n) ? ? ? ?//傳入數(shù)組的要排序的元素個數(shù)
{int i,j,min,t;
for(i=0;in-1;i++)
{ ?min=i; ? ? ?//min:當(dāng)前最小值下標(biāo)
for(j=i+1;jn;j++) ? ? ? ?//掃描余下的部分
if(a[min]a[j]) ? ? ? ?//若有其它元素更小,就記錄其下標(biāo)
min=j;
if(min!=i) ? ? ? ?//保若最小值不在排序區(qū)首位,就換到首位
{t=a[min]; a[min]=a[i]; a[i]=t;}
}
}
冒泡排序:
void bubble_sort(int a[], int n) ? ? ? ?//傳入數(shù)組的要排序的元素個數(shù)
{ int i, j, t;
for (j=0; jn-1; j++) ? ? ? ?//n個元素比較n-1輪
for (i= 0; in-1-j;i++) ? //比較相信的兩個數(shù)
if(a[i]a[i+1]) ? ? ? ? ?//若大小順序不符,就交換
{t=a[i]; ?a[i]=a[i+1]; a[i+1]=t;
}
#includestdio.h
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i10;i++)
scanf("%d",a[i]);
for(j=0;j9;j++) /*進(jìn)行9次循環(huán) 實現(xiàn)9趟比較*/
for(i=0;i9-j;i++) /*在每一趟中進(jìn)行9-j次比較*/
if(a[i]a[i+1]) /*相鄰兩個數(shù)比較,想降序只要改成a[i]a[i+1]*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i10;i++)
printf(" %d",a[i]);
}
擴(kuò)展資料:
冒泡排序算法的運(yùn)作
1、比較相鄰的元素。如果第一個比第二個大(?。徒粨Q他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大(小)的數(shù)。
3、針對所有的元素重復(fù)以上的步驟,除了最后已經(jīng)選出的元素(有序)。
4、持續(xù)每次對越來越少的元素(無序元素)重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較,則序列最終有序。
簡單的表示
#include stdio.h
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
int main()
{
int a[10] = {2,1,4,5,6,9,7,8,7,7};
int i,j;
for (i = 0; i 10; i++)
{
for (j = 9; j i; j--)//從后往前冒泡
{
if (a[j] a[j-1])
{
swap(a[j], a[j-1]);
}
}
}
for (i = 0; i 10; i++)
{
printf("%d\n", a[i]);
}
return 0;
}
參考資料來源:冒泡排序-百度百科
冒泡排序法的具體實現(xiàn)方法是這樣的,從數(shù)組的第一個元素`arr[0]`開始,兩兩比較**(`arr[n],arr[n+1]`),如果前面的數(shù)大于后面的數(shù)(`arr[n] arr[n+1]`),那么交換兩個元素的位置,把大的數(shù)往后移動。這樣依次經(jīng)過一輪比較以后,最大的數(shù)將會被交換到最后的位置(arr[n-1])。
C語言實現(xiàn)Bubblesort:
void?bubblesort(int?a[],?int?m)
{
int?i,j;
int?tmp;
int?flag?=?0;??//設(shè)定標(biāo)志,如果第一次循環(huán)比較時沒有發(fā)生交換,則說明數(shù)組是升序排序,不用排序,提前結(jié)束循環(huán)。
for(i?=?0;?i??m;?i++)??//外層循環(huán)控制循環(huán)次數(shù)
{
for(j?=?0;?j??m-1-i;?j++)????//內(nèi)層循環(huán)控制每次循環(huán)里比較的次數(shù)。
{
if(a[j]??a[j+1])
{
tmp?=?a[j];
a[j]?=?a[j+1];
a[j+1]?=?tmp;
flag?=?1;
}
}
if(0?==?flag)
{
printf("No?Sort\n");
break;
}
}
}
選擇排序法的過程是,通**過比較,選擇出每一輪中最值元素,然后把他和這一輪中最最前面的元素交換**,所以這個算法關(guān)鍵是要記錄每次比較的結(jié)果,即每次比較后最值位置(下標(biāo))。
C語言實現(xiàn)(Selectionsort)
void?selectionsort(int?a[],int?m)
{
int?i,j;
int?k;
int?tmp;
for(i?=?0;?i??m-1;?i++)//控制循環(huán)次數(shù),n個數(shù)需要n-1次循環(huán)
{
k?=?i;
for(j?=?i+1;?j??m?;?j++)
{
if(a[j]??a[k])
k?=?j;
}
//i不等于k是就證明a[i]不是最小的,
//i等于k時證明a[i]就是本輪比較過程中最小的值
if(i?!=?k)
{
tmp?=?a[i];
a[i]?=?a[k];
a[k]?=?tmp;
}
}
}
main()函數(shù)修改如下:
int?main()
{
int?apk(int?*);
int?a[10];
for?(i=0;i10;i++)
scanf("%d",a[i]);
apk(a);
for?(i=0;i10;i++)
printf("%d?",a[i]);
return?0;
}
apk()函數(shù)修改如下:
int?apk(int?a[])
{
for?(k=0;k9;k++)
for?(i=0;i10-k;i++)
if?(a[i]a[i+1])
{
j=a[i];
a[i]=a[i+1];
a[i+1]=j;
}
}
冒泡排序每一趟排序把最大的放在最右邊。
比如:
87 12 56 45 78
87和12交換:12 87 56 45 78
87和56交換: ? 56 87 45 78
87和45交換: ? ? ?45 87 78
87和78交換: ? ? ? ? 78 87
到此第一趟排序結(jié)束,接下來的每一趟排序都是這樣。
#includestdio.h
void?Print(int?*num,?int?n)
{
int?i;
for(i?=?0;?i??n;?i++)
printf("%d?",?num[i]);
puts("\n");
return;
}
void?Bubble_Sort(int?*num,?int?n)
{
int?i,?j;
for(i?=?0;?i??n;?i++)
{
for(j?=?0;?i?+?j??n?-?1;?j++)
{
if(num[j]??num[j?+?1])
{
int?temp?=?num[j];
num[j]?=?num[j?+?1];
num[j?+?1]?=?temp;
}
Print(num,?n);
}
}
return;
}
int?main()
{
int?num[8]?=?{87,?12,?56,?45,?78};
Bubble_Sort(num,?5);
return?0;
}