- 對n個數字組成的序列需要n-1趟冒泡排序;
- 每一趟定位資訊,都會确定一有序個記錄;
- 以此類推到最後直到最後會把所有的記錄進有序數組當中;
1、從下标1開始計數排序
#include <stdio.h>
#include <stdlib.h>
void Bubble_Sort(int array[],int n){//多少個元素
int i,j,k,temp;
for(i=1;i<=n-1;i++){//n個數字排序,隻用進行n-1趟周遊
for(j=1;j<=n-i;j++){//從第一位開始周遊,直到最後一個尚未歸位的數,n-i
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
void DisPlay(int array[],int n){
int i;
for(i=0;i<=n;i++){
printf("%d ",array[i]);
}
printf("\n");
}
int main() {
int array[11] = {0,43,12,35,18,26,57,7,21,43,46};//數字從下标1開始
DisPlay(array,10);
Bubble_Sort(array,10);
DisPlay(array,10);
return 0;
}
void Bubble_Sort(int array[],int n){//多少個元素
int i,j,k,temp;
for(i=0;i<n-1;i++){//n個數字排序,隻用進行n-1趟周遊
for(j=0;j<n-1-i;j++){//從第一位開始周遊,直到最後一個尚未歸位的數,n-i
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
void DisPlay(int array[],int n){//n為元素個數
int i;
for(i=0;i<n;i++){
printf("%d ",array[i]);
}
printf("\n");
}
int main() {
int array[11] = {29,43,12,35,18,26,57,7,21,43,46};//數字從下标1開始
DisPlay(array,11);
Bubble_Sort(array,11);
DisPlay(array,11);
return 0;
}
- 一旦發現某一趟沒有進行交換操作,那麼表明此時排序已經完成,不要在進行沒有必要的冒泡排序。提前結束循環
void Bubble_Sort(int array[],int n){//多少個元素
int i,j,k,temp,exchange;
for(i=1;i<=n-1;i++){//n個數字排序,隻用進行n-1趟周遊
exchange = 0;
for(j=1;j<=n-i;j++){//從第一位開始周遊,直到最後一個尚未歸位的數,n-i
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
exchange = 1;
}
}
if(exchange == 0){
break;
}
}
}