思想:
雙向氣泡排序
首先從前往後兩個兩個比較把大的數移到最後乙個位置,然後從後往前兩個兩個比較把小
的的數後往前推到陣列第乙個位置,這一過程就是第一輪這個時候第乙個位置就是陣列的
最小值,最後乙個位置就是陣列的最大值了然後把front++,behind--,在front與
behind之間再重複操作上述過程最終就會把整個陣列從小到大排列好。
假如輸入的無序陣列為:198
542設定乙個front等於第乙個數1的下標,behind等於最後乙個數2的下標
也就是int front =
0,behind=n-1;
(n為陣列長度)
先從前面開始,每兩個兩個比較,把大的數往後推
第一次兩兩比較交換:198
542第二次兩兩比較交換:189
542 第三次兩兩比較交換:185
942.
..最後一次兩兩比較交換:185
429 這個時候最大值已經到了最後乙個位置
執行**:behind--;(讓behind指向現在陣列的倒數第二個元素2,因為最後乙個元
素已經是在他應該在的位置了)
從後面開始往前走
第一次兩兩比較交換:185
249第二次兩兩比較交換:182
549第三次兩兩比較交換:128
549.
..然後就把1確定為最小的值放在了第乙個位置
這個時候執行**:front++;(因為front本來是指向第乙個元素,現在的話,第乙個
元素已經的找到是最小的了,就不用再管了)
這個時候的front和behind之間的元素就變成了:285
4front指向2,behind指向4,再重複上述過程
直到front=behind時,就是已經排序完畢,再輸出即可
typedef
struct
type;
//雙向氣泡排序
void
bidirectionalbubblesort
(type r,
int n,
int comparecount,
int movecount)}if
(!flag)
//若flag還是等於0,即表明沒有進行交換,就是說已經有無需進行下一步了序的
break
; behind--
;for
(int i = behind; i > front; i--)}
front++
; movecount++
;printf
("第%.2d趟排序的結果:"
, movecount)
;for
(int k =
0; k < n; k++
)printf
("\n");
}printf
("比較次數為:%d\n"
, comparecount)
;//比較次數
printf
("移動次數為:%d\n"
, movecount)
;//移動次數
}
改進 優化 冒泡法排序
class bubblesort j static void print int mintarr i static void change refint i1,ref inti2 static void bubblesort int a,outintn 如果查詢一次後發現不需交換,說明已經排完序 可...
選擇排序,氣泡排序,雙向氣泡排序
氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...
選擇排序,氣泡排序,雙向氣泡排序
首先是選擇排序,原理 1 找到未排序的數中最小的數放到最前面 2 陣列後移一位 3 重複上面兩部。void selectsorting if min a i swap b i b t 這個應該是我第乙個接觸到的排序演算法,結果第一次打排序水題直接上冒泡,直接接了一發tle 才知道有nlogn的演算法...