C语言中冒泡排序及优化
生活随笔
收集整理的這篇文章主要介紹了
C语言中冒泡排序及优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
/** 指針指向調換,也是內容調換 */ void swap(int *a,int *b) { // int tmp; // tmp = *a; // *a = *b; // *b = tmp;*a = *a^*b;*b = *b^*a;*a = *a^*b; }這是調換兩個直的方法。
舉個例子解釋下先,其實寫完我還是有點繞暈。
假如a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現:
a=a∧b;
b=b∧a;
a=a∧b;
可以用下面的豎式來說明:
即等效于以下兩步:
① 執行前兩個賦值語句:“a=a∧b;”和“b=b∧a;”相當于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b。b∧b的結果為0,因為同一個數與本身相∧,結果必為0。因此b的值等于a∧0,即a,其值為3。
② 再執行第三個賦值語句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相當于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。
a得到b原來的值。
// 去除了沒有必要的循環 void bubble_sort(int *a,int n) {int flag = 1; // 控制外部循環的int k = n; // 外部循環的次數,開始等于數組的總數while(flag){flag = 0; // 等于外部零循環結束for(int i=1;i<k;i++){if(a[i-1]>a[i]) // 有與排序沖突的順序{swap(&a[i-1],&a[i]); // 進行位置調換flag = 1; // 檢查到這次循環有位置沖突,繼續進行外部循環檢查}}k--; // 完成了一個數據的位置調換} } void bubble_sort_other(int *a,int n) {for(int i=0;i<n;i++)for(int j = 1;j<n-i;j++){if(a[j-1]>a[j]){a[j-1] = a[j-1]^a[j];a[j] = a[j]^a[j-1];a[j-1] = a[j-1]^a[j];}} }bubble_sort_other是一般人都可以寫出來的
bubble_sort是進行優化了的。
用下試試
int main(int argc, const char * argv[]){int a[10]={3,2,4,5,6,7,8,9,24,13};bubble_sort(a,10);for (int i = 0; i < 10; i++) {printf("%d\n",a[i]);}return 0; }結果:
2
3
4
5
6
7
8
9
13
24
轉載于:https://my.oschina.net/sttman/blog/686953
總結
以上是生活随笔為你收集整理的C语言中冒泡排序及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斯坦福大学的机器学习跟深度学习。
- 下一篇: JQuery 获取节点