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語言冒泡排序是什麼

冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序演算法。
它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

演算法原理編輯
冒泡排序演算法的運作如下:(從後往前)

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重復以上的步驟,除了最後一個。

持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較
#include<stdio.h>
#define SIZE 8

voidbubble_sort(inta[],intn);

voidbubble_sort(inta[],intn)//n為數組a的元素個數
{
inti,j,temp;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])//數組元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
intmain()
{
intnumber[SIZE]={95,45,15,78,84,51,24,12};
inti;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d",number[i]);
}
printf("\n");
}

③ C語言冒泡排序法是怎麼排序的

C語言冒泡排序法的排序規則:

將被排序的記錄數組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。

  1. 初始 R[1..n]為無序區。

  2. 第一趟掃描 從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。

    即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對於每對氣泡(R[j+1],R[j]),若R[j+1].key<R[j].key,則交換R[j+1]和R[j]的內容。 第一趟掃描完畢時,"最輕"的氣泡就飄浮到該區間的頂部,即關鍵字最小的記錄被放在最高位置R[1]上。

  3. 第二趟掃描 掃描R[2..n]。

    掃描完畢時,"次輕"的氣泡飄浮到R[2]的位置上…… 最後,經過n-1 趟掃描可得到有序區R[1..n] 注意: 第i趟掃描時,R[1..i-1]和R[i..n]分別為當前的有序區和無序區。掃描仍是從無序區底部向上直至該區頂部。掃描完畢時,該區中最輕氣泡飄浮到頂部位置R上,結果是R[1..i]變為新的有序區。

④ c語言(這是什麼排序方法是冒泡排序么)

這是選擇排序,說它是冒泡排序的,將害你非淺。我跟你說說選擇排序與冒泡排序的異同點,你自己好好甑別。

相同點:都是每趟得到無序區中的最小元,並將最小元移到無序區的最前面(即有序區的末尾),從而擴大有序區的同時縮小無序區。最終使得無序區剩下最後一個元素(即最大元)時結束。

不同點:每趟得到最小元的方法不同,即對於問題「從一列數中求出它們的最小元」,二者採用的方法是不同的。一個是選擇法(我們通常採用的是選擇法)。另一個採用的是冒泡法。對於問題「從一列數中求出它們的最小元」的解法。
選擇法,又通常會有三種,一種是用一個變數min去存儲最小元,在對數列進行掃描時,min始終存放的是當前已知的最小元。程序可這樣寫
min = a[0];
for(i = 1; i < n; i++)
if(a[i] < min) min = a[i]; //這里是賦值
而冒泡法要這樣做時,它是現將最小元移到最開始的位置,然後再將最開始位置中的最小元放入到min中,冒泡法程序如下。
for(j = n - 1; j > 0; j--)
if(a[j] < a[j - 1]) Swap(a[j], a[j - 1]); //這里是交換
min = a[0];
第二種是用一個指針min去指向最小元,在對數列進行掃描時,min始終指向當前已知的最小元。程序可這樣寫
min = 0;
for(i = 1; i < n; i++) if(a[i] < a[min]) min = i;
第三種是將最小元存放在最開始的位置,在對數列進行掃描時,a[0]始終指向當前已知的最小元。程序可這樣寫
for(i = 1; i < n; i++) if(a[i] < a[0]) Swap(a[0], a[i]);
或者先找到最小元的位置,然後將首元與最小元交換,則這樣寫
min = 0;
for(i = 1; i < n; i++) if(a[i] < a[min]) min = i;
Swap(a[0], a[min]);

而冒泡法去得到一列數的最小元時採用的是冒泡思想:從後向前掃描這列數,然後相鄰兩個元素進行比較,若逆序則交換,當掃描到最前面時,則最小元也就移到最前面了。程序可這樣寫
for(j = n - 1; j > 0; j--) if(a[j] < a[j - 1]) Swap(a[j], a[j - 1]);

從上可以看出,一、選擇法掃描時通常是從前向後掃描,而冒泡法通常是從後向前掃描。二、冒泡法交換數據時,一定是發生在相鄰兩個元素之間(且這兩個元素發生逆序)。而選擇法交換數據時,所交換的兩個元素未必是相鄰的。三、冒泡法中的最小元是從後面一步一步移到最前面的,邊掃描邊移動,而選擇法可以先掃描,先得到最小元的位置,然後將最小元一次性將其與首元交換。四、當最小元在數列的後面時,冒泡法將一定會發生多次的交換(沒辦法改進),而選擇法改進後只要一次交換就夠了。

⑤ 求 c語言選擇排序法和 冒泡排序法代碼!

選擇排序:來

void select_sort(int a[],int n) //傳入數組的自要排序的元素個數

{int i,j,min,t;

for(i=0;i<n-1;i++)

{ min=i; //min:當前最小值下標

for(j=i+1;j<n;j++) //掃描餘下的部分

if(a[min]>a[j]) //若有其它元素更小,就記錄其下標

min=j;

if(min!=i) //保若最小值不在排序區首位,就換到首位

{t=a[min]; a[min]=a[i]; a[i]=t;}

}

}

冒泡排序:

void bubble_sort(int a[], int n) //傳入數組的要排序的元素個數

{ int i, j, t;

for (j=0; j<n-1; j++) //n個元素比較n-1輪

for (i= 0; i<n-1-j;i++) //比較相信的兩個數

if(a[i]>a[i+1]) //若大小順序不符,就交換

{t=a[i]; a[i]=a[i+1]; a[i+1]=t;

}

⑥ 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趟比較*/

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]);


}

(6)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;

}

參考資料來源:冒泡排序-網路

⑦ c語言編程:對10個數冒泡排序(升序)。

#include<stdio.h>

intmain(){

intnumber[10]={95,45,15,78,84,51,24,12,34,23};

for(int j=0;j< 9;j++)

for(int i=0;i< 9 -j;i++) {

if(a[i]>a[i+1]) {

int temp=a[i];

a[i]=a[i+1];

a[i+1]=temp; }

}

for(int i=0;i< 10;i++){

printf(「%d」,a[i]); }

}

插入排序

已知一組升序排列數據a[1]、a[2]、……a[n],一組無序數據b[1]、b[2]、……b[m],需將二者合並成一個升序數列。

首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a數組中某一數據a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。

b[2]~b[m]用相同方法插入。

快速排序

快速排序是大家已知的常用排序演算法中最快的排序方法。已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先任取數據a[x]作為基準。

比較a[x]與其它數據並排序,使a[x]排在數據的第k位,並且使a[1]~a[k-1]中的每一個數據<a[x],a[k+1]~a[n]中的每一個數據>a[x],然後採用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n]兩組數據進行快速排序。

希爾排序

已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。

首先取一增量d(d<n),將a[1]、a[1+d]、a[1+2d]……列為第一組,a[2]、a[2+d]、a[2+2d]……列為第二組……,a[d]、a[2d]、a[3d]……列為最後一組以次類推,在各組內用插入排序,然後取d'<d,重復上述操作,直到d=1。

⑧ C語言冒泡排序法

#include<stdio.h> //鏈接標准頭文件
#define N 5 //定義常量N並賦值為5
void main() //主函數入口
{ //表示主函數開始
int i,j; //定義整形變數i和j
int grade[N],temp; //定義N維(N=5,也就是五維啦^^)整形數組和整形變數temp
printf("輸入5個數\n"); //在屏幕上顯式「輸入5個數」並且換行
for(i=0;i<N;i++) //開始for循環,從i=0,每次加1,直到i=4,共需循環5次
{ //循環體開始
scanf("%d",&grade[i]); //依次獲取用戶輸入的整數值並存入數組grade中
} //循環結束
for(i=0;i<N;i++) //開始外層for循環,從i=0,每次加1,直到i=4
{ //外層循環體開始
for(j=0;j<N-1-i;j++) //開始外層for循環,從j=0,每次加1直到i等於外層循環的N-j-1
{ //內層循環體開始
if(grade[j]<grade[j+1]) //條件判斷
{ //如果整形數組前面的數比其後的小,執行以下語句
temp=grade[j+1]; //將比較大的數賦值給temp
grade[j+1]=grade[j]; //將比較小的數賦值給數組中後面的變數
grade[j]=temp; //將比較大的數賦值給數組中前面的變數
} //從此便完成大小變數的交換,使得大值往前放
} //結束內層循環
} //結外內層循環,完成排序
printf("最後排序為:\n");//在屏幕顯式「最後排序為:」並換行
for(i=0;i<N;i++) //同開始的for循環類似
{ //開始循環輸出
printf("%d",grade[i]); //只是這里要逐個輸出數組中的五個數值
} //結束循環輸出
printf("\n"); //輸出換行到屏幕,看不到什麼效果,可刪掉
} //結束main()函數

⑨ c語言編程:用冒泡排序法輸入的任意10個數排序.

對輸入10個數進行冒泡排序
main()
{
int a[11],x;
int i,j;
printf("Input 10 numbers please\n");
for(i=1;i<=10;i++) scanf("%d",&a[i]);
printf("\n");
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
{
if(a[i]>a[j])
{ x=a[j]; a[j]=a[i]; a[i]=x; }
}
printf("The sorted 10 numbers:\n");
for(i=1;i<=10;i++)
{if(i%6==0) printf("\n");
printf("%d\t",a[i]);
}
printf("\n");
getch();
}

⑩ 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;

}

參考資料來源:冒泡排序-網路