經典排序演算法的經典問題

2022-03-11 07:38:28 字數 1625 閱讀 6706

問題描述:乙個陣列只含有三種元素:0,1,2,不使用計數排序,將0放在1的左邊,2放在1的右邊。

分析:1.可借鑑快排中劃分的思想。將陣列分為,arr,

2.遍歷arr,當發現0時,0區向右擴,發現2時,2區向左擴,

3.當前元素進入2區時,結束。

vector sortthreecolor(vector a, int

n)

if(a[i]==2

) }

return

a; }

問題描述:在乙個行列都有序的二維矩陣中,找出某個元素。

如矩陣:1 2 3 4   查詢元素6

2 3 3 4

3 4 6 7

分析:首先從矩陣右上角開始,如果當前元素e>6,則往左走,即列-1,如果e<6,則往下走,即行+1,否則找到。

如果當前元素下標超出矩陣範圍,則找不到。

對於乙個陣列,請設計乙個高效演算法計算需要排序的最短子陣列的長度。

給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的長度。(原序列位置從0開始標號,若原序列有序,返回0)。保證a中元素均為正整數。

測試樣例:

[1,4,6,5,9,10],6
返回:2
vector sortthreecolor(vector a, int

n)

if(a[i]==2

) }

return

a; }

問題描述:

有乙個整形陣列a,請設計乙個複雜度為o(n)的演算法,算出排序後相鄰兩數的最大差值。

給定乙個int陣列aa的大小n,請返回最大的差值。保證陣列元素多於1個。

測試樣例:

[1,2,5,4,6],5

返回:2
分析:

1.使用基於桶排序的思想對資料進行劃分,得到相鄰劃分區間的最大差值。

步驟:1.找出max,min。

2.len=max-min。

2.建立n+1個桶,前n個桶存放落於區間 [min+i*len,min+(i+1)*len )內的陣列元素。(由於初值是min,間距是len,分析可以就可以算出來)

3.把最大值(可能不止乙個)放入最後乙個桶內。

4.找出相鄰桶相差最大的那個的值。(前乙個桶的陣列元素的最大值,後乙個桶的陣列元素的最小值)

附實現**:

int maxgap(vector a, int

n)

if(maxvalue==minvalue) return0;

vector

int> > data(n+1

);

int len=(maxvalue-minvalue);

for(int i=0;i)

}int maxgap=0

;

for(int i=0;i)

}return

maxgap;

}

經典排序演算法

排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...

經典排序演算法

1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...

經典排序演算法

思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...