雙向氣泡排序

2021-05-23 10:21:41 字數 1227 閱讀 1098

這是完全自主編碼,哈哈。但是思想還是書上先有的,但是沒有具體**。下面是執行結果截圖,輸入的為23 ,45,2,15,9

冒牌排序流程如下,一次正向冒泡,從左至右。然後一次反向冒泡,從右至左。

第一次把最大的記錄放到表尾,第二次將最小記錄放到表頭,如此反覆。

pos[0]記錄無序序列的第乙個位置0,pos[1]記錄無序表的最後乙個位置len-1;

步長為d,正向冒泡為1,反響冒泡為-1.合併兩方向為:

for(int i=pos[(1-d)/2];i!=pos[(1+d)/2];i=i+d).

changeflag 用來標誌是否有交換,如果沒有交換則終止迴圈。

如果有交換,則將最後一次交換的位置賦給change。

在一次迴圈冒泡結束後將步長取反,如果changeflag 為真則繼續。

在之前的「靜態表查詢」**中加入如下函式,實現雙向排序功能。

全部**為:

//#include "stdafx.h"

#include "staticsearch.h"

#include using namespace std;

templatessearch::ssearch()

templatessearch::~ssearch()

templatevoid ssearch::create(int n)

}templateint ssearch::sesearch(t key)

} else

else

cout<

d=-d;

}while(changeflag);

}templatevoid ssearch::ascendsort()

} }cout<

}templateint ssearch::bisearch_1(t key) //折半查詢

else

cout<

return -1; }}

templateint ssearch::bisearch2(int x, int y,t key) //recursive to find the key inbtween x an y,inlcude x and y

templateint ssearch::bisearch_2(t key)

templatevoid ssearch::display()

}while(choice!=6);

return 0;

}

雙向氣泡排序

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

氣泡排序 與 雙向氣泡排序

public class test if k 0 break last k public static void bidirectionalbubblesort int a last k for int m last m first m first k if first last break pub...