雙向氣泡排序 含註解 含過程

2021-10-05 16:27:59 字數 1623 閱讀 4946

/*

雙向氣泡排序是在氣泡排序的基礎上改進而來的,其基本思想跟最原始的冒泡排

序是一樣的,只不過排序過程稍微優化了一點。 我們還是以整數公升序排序為例來簡單說說這種排序的過程:

首先從前往後把最大 數移到最後,然後反過來從後往前把最小的乙個數移動到陣列最前面,這一過程 就是第一輪,然後重複這一過程,

最終就會把整個陣列從小到大排列好。雙向冒 泡排序要稍微優於傳統的氣泡排序,因為雙向排序時陣列的兩頭都排序好了,

我們只需要處理陣列的中間部分即可,而單向即傳統的氣泡排序只有尾部的元素是 排好序的,這時每輪處理都需要從頭一直處理到

已經排好序元素的前面乙個元 素。雖然它在效率上有了點改進,但它也不能大幅度提高其排序的效率,這是由 氣泡排序的基本過程所決定了的。

雙向冒泡前陣列 8 4 2 3 5 1 6 9 0 7

第 1 次排序-->4 2 3 5 1 6 8 0 7 9

//第一次正向排序,得到未排序陣列中最大的數 9

第 1 次排序<--0 4 2 3 5 1 6 8 7 9

//第一次反向排序,得到未排序陣列中最小的數 0

第 2 次排序-->0 2 3 4 1 5 6 7 8 9

//第二次正向排序,得到未排序陣列中最大的數 8

第 2 次排序<--0 1 2 3 4 5 6 7 8 9

//第一次反向排序,得到未排序陣列中最大的數 1

第 3 次排序-->0 1 2 3 4 5 6 7 8 9

//運氣比較好,前兩次已經排好序了,flag = 0,不進行第三次排序 雙向冒泡後陣列 0 1 2 3 4 5 6 7 8 9

*/#include

#include

#define max 10

//列印結果

void

show

(int arr,

int n)

// 交換陣列元素位置

void

swap

(int

*num_a,

int*num_b )

//傳入陣列位址

//改進版的氣泡排序(雙向冒泡)

void

bidbubblesort

(int array,

int n)}if

(!flag )

break

; high--

;for

( i=high; i>low; i--

)//反向冒泡

low++;}

}int

main()

;printf

("排序前陣列: ");

show

(arr_test,max)

;bidbubblesort

(arr_test,max)

;printf

("排序後陣列: ");

show

(arr_test,max)

;return0;

}

雙向氣泡排序

這是完全自主編碼,哈哈。但是思想還是書上先有的,但是沒有具體 下面是執行結果截圖,輸入的為23 45,2,15,9 冒牌排序流程如下,一次正向冒泡,從左至右。然後一次反向冒泡,從右至左。第一次把最大的記錄放到表尾,第二次將最小記錄放到表頭,如此反覆。pos 0 記錄無序序列的第乙個位置0,pos 1...

雙向氣泡排序

演算法思想 在正反兩個方向交替進行掃瞄,即第一趟把關鍵字最大的元素放到序列的最後面,第二趟把關鍵字最小的元素放到序列的最前面,如此反覆 演算法實現 跟普通冒泡差不多,就是多設兩個指標來控制邊界就可以了 include using namespace std void dobubblesort int...

雙向氣泡排序

includeusing namespace std typedef struct node node,linklist void sort linklist l else p p next tail p p tail prior while exchange p prior head p p pr...