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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

起泡排序,別名“冒泡排序”,該算法的核心思想是將無序表中的所有記錄,通過兩兩比較關鍵字,得出升序序列或者降序序列。

例如,對無序表{49,38,65,97,76,13,27,49}進行升序排序的具體實現過程如圖 1 所示:

圖 1 第一次起泡

如圖 1 所示是對無序表的第一次起泡排序,最終將無序表中的最大值 97 找到并存儲在表的最后一個位置。具體實現過程為:

首先 49 和 38 比較,由于 38<49,所以兩者交換位置,即從(1)到(2)的轉變;

然后繼續下標為 1 的同下標為 2 的進行比較,由于 49<65,所以不移動位置,(3)中 65 同 97 比較得知,兩者也不需要移動位置;

直至(4),97 同 76 進行比較,76<97,兩者交換位置,如(5)所示;

同樣 97>13(5)、97>27(6)、97>49(7),所以經過一次冒泡排序,最終在無序表中找到一個最大值 97,第一次冒泡結束;

由于 97 已經判斷為最大值,所以第二次冒泡排序時就需要找出除 97 之外的無序表中的最大值,比較過程和第一次完全相同。

經過第二次冒泡,最終找到了除 97 之外的又一個最大值 76,比較過程完全一樣,這里不再描述。

通過一趟趟的比較,一個個的“最大值”被找到并移動到相應位置,直到檢測到表中數據已經有序,或者比較次數等同于表中含有記錄的個數,排序結束,這就是起泡排序。

起泡排序的具體實現代碼為:

#include

//交換 a 和 b 的位置的函數

void swap(int *a, int *b);

int main()

{

int array[8] = {49,38,65,97,76,13,27,49};

int i, j;

int key;

//有多少記錄,就需要多少次冒泡,當比較過程,所有記錄都按照升序排列時,排序結束

for (i = 0; i < 8; i++){

key=0;//每次開始冒泡前,初始化 key 值為 0

//每次起泡從下標為 0 開始,到 8-i 結束

for (j = 0; j+1<8-i; j++){

if (array[j] > array[j+1]){

key=1;

swap(&array[j], &array[j+1]);

}

}

//如果 key 值為 0,表明表中記錄排序完成

if (key==0) {

break;

}

}

for (i = 0; i < 8; i++){

printf("%d ", array[i]);

}

return 0;

}

void swap(int *a, int *b){

int temp;

temp = *a;

*a = *b;

*b = temp;

}

運行結果為:

13 27 38 49 49 65 76 97

總結

使用起泡排序算法,其時間復雜度同實際表中數據的無序程度有關。若表中記錄本身為正序存放,則整個排序過程只需進行 n-1(n 為表中記錄的個數)次比較,且不需要移動記錄;若表中記錄為逆序存放(最壞的情況),則需要 n-1趟排序,進行 n(n-1)/2 次比較和數據的移動。所以該算法的時間復雜度為O(n2)。

總結

以上是生活随笔為你收集整理的java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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