日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中冒泡排序及优化

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言中冒泡排序及优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。