資料結構 bubble sort

2022-07-08 09:39:10 字數 1687 閱讀 8086

問題描述

給定乙個 1~n 的排列 p,即 1 到 n 中的每個數在 p 都只出現一次。 現在要

對排列 p 進行氣泡排序,**如下:

for (int i = 1; i <= n; ++i)

for (int j = n, t; j > i; ‐‐j)

if (p[j ‐ 1] > p[j])

t = p[j], p[j] = p[j ‐ 1], p[j ‐ 1] = t;

在排序過程中,數字的位置可能會發生變化。對於 1~ n 的每個數字,你需

要輸出過程中達到的最左位置下標和最右位置下標的差的絕對值。

★資料輸入

第一行為 n,表示排列長度。

第二行為排列 p。

資料保證:

80%的資料, n <= 1000

100%的資料, n <= 100000

★資料輸出

輸出一行,第 i 個數字表示數字 i 最左與最右位置的差的絕對值。

輸入示例

輸出示例

43 2 1 4

2 1 2 0

★注釋樣例氣泡排序過程:

swap 2 1: 3 2 1 4 > 3 1 2 4

swap 3 1: 3 1 2 4 > 1 3 2 4

swap 3 2: 1 3 2 4 > 1 2 3 4

思路定義結構體,成員有:data(資料值、排序後下標)、pos(排序前下標)、num(當前數右邊比它小的數)

歸併,過程中統計數右邊比它小的數,更新num

最大下標為pos+num,最小下標為data或pos

ps:好像用樹狀陣列做也可以,但是我不會╮(๑•́ ₃•̀๑)╭

code

1 #include 2 #include 3

4struct

node5;

1011 node *buf;

1213 inline int max(int a, int

b)14

17 inline int min(int a,int

b)18

2122

void mergesort(node *arr, int l,int

r)2334}

3536

int m = (l+r)/2;37

inti,j,k;

38int num=0;39

mergesort(arr,l,m);

40 mergesort(arr,m+1

,r);

41for(i=l;i<=r;i++) buf[i] =arr[i];

42for(k=l,i=l,j=m+1 ; k<=r; k++)

4348

else

if(j>r)

4953

else

if(buf[i].data 5458

else

5963}64

}6566int

main()

6779 mergesort(arr,1

,n);

80for(i=1;i<=n;i++)

8187 printf("\n"

);88

89free

(arr);

90free

(buf);

91return0;

92 }

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 資料結構演算法

分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...

資料結構 01 資料與資料結構

1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...