Problem D 雙向氣泡排序

2022-06-29 08:18:09 字數 1185 閱讀 8096

time limit: 1 sec  memory limit: 128 mb

submit: 447  solved: 197

[submit][status][web board]

雙向冒泡從小到大排序演算法描述:

(1)從當前序列的第1個元素開始,對相鄰元素從前往後兩兩比較,不滿足條件(從小到大)則彼此交換,一直到序列結束。此時最後1個元素為最大值。

(2)從當前序列的倒數第2個元素開始,對相鄰元素從後往前兩兩比較,不滿足條件則彼此交換,一直到序列開始。此時第1個元素為最小值。

(3)將第2個元素作為新序列的開始,倒數第2個元素作為新序列的結束,重複(1)~(2),直到新序列沒有元素。

改進的雙向冒泡從小到大排序演算法描述:

(a)在上述演算法第(1)步,記錄每次的交換位置,令high表示最後1次交換位置,若比較過程未發生交換,則演算法結束;

(b)在演算法第(2)步,只需要從high向前比較即可,比較過程中記錄每次的交換位置,令low表示最後1次交換位置,若比較過程未發生交換,則演算法結束;

(c)在演算法第(3)步,令新序列為開始位置為low,結束位置為high,重複(a)~(b),直到新序列沒有元素。

for(i = 0; i#include

int main(){

int a[100],i,n;

scanf("%d",&n);

for(i=0; iscanf("%d",&a[i]);

low = 0;

high = n - 1;

while (low < high){

if (a[i]>a[i+1]){

temp = a[i];

a[i] = a[i+1];

a[i+1] = temp;

high = i;       //記錄交換位置

break;

請在該部分填寫缺少的**

break;

for(i = 0; iprintf("%d ",a[i]);

printf("\n");

return 0;

n和n個整數

從小到大排序後的數列

6

21 45 85 47 3 15

3 15 21 45 47 85

for(i=high-1;i>low;i--)

{if(a[i]

雙向氣泡排序

這是完全自主編碼,哈哈。但是思想還是書上先有的,但是沒有具體 下面是執行結果截圖,輸入的為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...