❶ c語言冒泡排序法代碼
冒泡排序是排序演算法的一種,思路清晰,代碼簡潔,常被用在大學生計算機課程中。「冒泡」這個名字的由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。這里以從小到大排序為例進行講解。基本思想及舉例說明
冒泡排序的基本思想就是不斷比較相鄰的兩個數,讓較大的元素不斷地往後移。經過一輪比較就,選出最大的數;經過第2輪比較,就選出次大的數,以此類推。下面以對 3 2 4 1 進行冒泡排序說明。
❷ 求指導C語言的冒泡排序代碼
main()函數修改如下:
intmain()
{
intapk(int*);
inta[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
apk(a);
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;
}
apk()函數修改如下:
intapk(inta[])
{
for(k=0;k<9;k++)
for(i=0;i<10-k;i++)
if(a[i]>a[i+1])
{
j=a[i];
a[i]=a[i+1];
a[i+1]=j;
}
}
❸ C語言程序冒泡排序
#include<stdio.h>
intmain()
{
inta[10];
intcount=0,i,j,temp;
charc;
printf("pleaseinputnumbers:");
while(1)
{
scanf("%d",&a[count]);
count++;
if(c=getchar()==' ')break;
}//輸入
for(i=0;i<count;i++)
for(j=0;j<count-i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}//冒泡,較大的數沉下去
printf("thesortednumbers:");
for(i=0;i<count;i++)printf("%d",a[i]);
}
❹ c語言!!!冒泡排序
for(i=0;i<3;i++){
for(j=i+1;j<4;j++)
{
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
根據你的代碼來算的話,最外層循環a[0]=5,內層循環3.7.1,內層第一次循環比較5和3,不交換,內層第二次循環比較5和7,互換,此時a[0]=7,第三次內層循環比較7和1,不互換,第一次外層循環結果為7 3 5 1。隨後執行外層第二次循環,具體同上...最後執行完畢為7 5 3 1了。
❺ C語言冒泡排序
# include<stdio.h>
main()
{
int i,j,n,a[10],m;
printf("Enter n(n<=10):");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++){
for(j=0;j<n-i;j++)
if(a[j]>a[j+1]){/*不滿足if裡面的條件就交換*/
m=a[j];
a[j]=a[j+1];
a[j+1]=m;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}測試用例:過程寫的不是很詳細,只寫了主要部分,如果有什麼不明白的地方歡迎追問。
❻ c語言冒泡排序(要求輸出每一步排序過程)代碼
for(i=0;i<n_length;i++){
/*這里是冒泡*/
for(j=0;j<n_length-1;j++){
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
/*只要多加個顯示的循環不就行了*/
for(k=0;k<length;k++){
pritf("%d\t",a[k]);
printf("\n");
}
}
❼ 冒泡排序的C語言代碼
程序如下:
#include<malloc.h>
#include<stdio.h>
intmain(void)
{
inti,j,t,num;
int*p;
printf("請輸入要排序的數的個數:num=");
scanf("%d",&num);
p=(int*)malloc(num*sizeof(int));
//輸入要排序的數
for(i=0;i<num;++i)
{
printf("請輸入第%d個要排序的數p[%d]= ",i+1,i);
scanf("%d",&p[i]);
}
//冒泡排序
for(i=0;i<num-1;++i)
{
for(j=0;j<num-1-i;++j)
{
if(p[j]>p[j+1])//>表示升序<表示降序
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
//輸出已經排序好的數
printf("輸出已經排序好的數");
for(i=0;i<num;++i)
{
printf("%d",p[i]);
}
printf(" ");
return0;
}
程序運行結果:
隨機輸入十個數:
❽ 關於C語言冒泡排序
if(num[j+i]<num[j])
改為
if(num[j+1]<num[j])
即可。
完整的修改後程序如下:
//---------------------------------------------------------------------------
#include<stdio.h>
void main()
{
int num[]={2,5,1,4,3,0,6,13,7,12,8,11,10,9};
int count=sizeof(num)/sizeof(num[0]);
int tmp,i,j; /*建議將i和j的定義放在這里,ANSI C不允許你那樣定義變數*/
int swapped; /*建議用int,在ANSI C中沒有bool類型*/
for(i=0;i<count;i++)
{
swapped=0; /*建議*/
for(j=0;j<count-i-1;j++)
{
if(num[j+1]<num[j]) /**** 注意這里!應該是num[j+1]而非num[j+i] ****/
{
tmp=num[j+1];
num[j+1]=num[j];
num[j]=tmp;
swapped=1; /*建議*/
}
}
if(!swapped)
break;
}
for(i=0;i<count;i++)
{
printf("%d ",num[i]);
}
}
//---------------------------------------------------------------------------
*********************************
標准C語言中沒有布爾類型(也就是你的程序中的bool類型),邏輯真和邏輯假用非0和0表示,非0值表示邏輯真(也就是你程序中的true),0表示邏輯假(也就是你程序中的false)。
這些修改只是建議,除了if語句部分的修改是必須的之外,如果你的程序不考慮移植性,其它部分可以保留原樣。
❾ c語言 冒泡排序
第一個程序數組的個數不到10,第二個程序數組到了10個,
for (int j=0; j<9-i ; j++) 這句應該改為
for (int j=0; j<9-i -1; j++)
否則在第二程序就會出現數組訪問越界的問題,
而第一個程序由於數據不到10個,所以不會出現越界。
❿ C語言冒泡排序。
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++) /*進行9次循環 實現9趟比較*/
for(i=0;i<9-j;i++) /*在每一趟中進行9-j次比較*/
if(a[i]>a[i+1]) /*相鄰兩個數比較,想降序只要改成a[i]<a[i+1]*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
(10)c語言冒泡程序代碼擴展閱讀:
冒泡排序演算法的運作
1、比較相鄰的元素。如果第一個比第二個大(小),就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。
3、針對所有的元素重復以上的步驟,除了最後已經選出的元素(有序)。
4、持續每次對越來越少的元素(無序元素)重復上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。
簡單的表示
#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 ", a[i]);
}
return 0;
}