/*
雙向氣泡排序是在氣泡排序的基礎上改進而來的,其基本思想跟最原始的冒泡排
序是一樣的,只不過排序過程稍微優化了一點。 我們還是以整數公升序排序為例來簡單說說這種排序的過程:
首先從前往後把最大 數移到最後,然後反過來從後往前把最小的乙個數移動到陣列最前面,這一過程 就是第一輪,然後重複這一過程,
最終就會把整個陣列從小到大排列好。雙向冒 泡排序要稍微優於傳統的氣泡排序,因為雙向排序時陣列的兩頭都排序好了,
我們只需要處理陣列的中間部分即可,而單向即傳統的氣泡排序只有尾部的元素是 排好序的,這時每輪處理都需要從頭一直處理到
已經排好序元素的前面乙個元 素。雖然它在效率上有了點改進,但它也不能大幅度提高其排序的效率,這是由 氣泡排序的基本過程所決定了的。
雙向冒泡前陣列 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...