原理:從左到右一次比較,如果左側數字比右側數字大(小),則兩數交換,否則比較下一? ? ? ? ? ? ?組數字,每一次大循環比較可以將亂序的最右側數字改為最大(最小),每一次小循環的比? ? ? ? ? ? ?較次數相對于前一次要減一
動態用例:
升序排序代碼詳解:
void bubble_sort (int arr[],int sz) //將數組和元素個數傳過來
{for(int i=0;i<sz-1;i++) //每次大循環可以確定亂序最后一個數字,最多需要sz-1次循環{int tmp=0;for(int j=0;j<sz-1-i;j++)//每次小循環,因為已經確定最后的i個元素,剩下需要比較的元素個數就為sz-i,而需要比較的次數就為sz-1-i{if(arr[j]>arr[j+1])//相鄰兩個數比較,如過前一個數比后一個數大就交換{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
tmp=1;}}
if(tmp==0)
break;}
}
降序排序代碼詳解:
void bubble_sort (int arr[],int sz) //將數組和元素個數傳過來
{for(int i=0;i<sz-1;i++) //每次大循環可以確定亂序最后一個數字,最多需要sz-1次循環{int tmp=0;for(int j=0;j<sz-1-i;j++)//每次小循環,因為已經確定最后的i個元素,剩下需要比較的元素個數就為sz-i,而需要比較的次數就為sz-1-i{if(arr[j]<arr[j+1])//相鄰兩個數比較,如過前一個數比后一個數小就交換{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
tmp=1;}}
if(tmp==0)
break;}
}
兩者排序方式唯一的區別:
1.升序排序:如果前一個數比后一個數大,二者就交換,所以用>
2.降序排序:如果前一個數比后一個數大,二者就交換,所以用<
tmp的作用:
每一次大循環,我們都將tmp設置為0,在每一次小循環里面,如果兩個數進行了交換,我們就將tmp改為1,出這次大循環判斷一下tmp是否為0,如果為0,那么本次循環沒有進行交換,也就是數組已經排好序,直接退出大循環,否則繼續進行循環。