問題描述:乙個陣列只含有三種元素:0,1,2,不使用計數排序,將0放在1的左邊,2放在1的右邊。
分析:1.可借鑑快排中劃分的思想。將陣列分為,arr,
2.遍歷arr,當發現0時,0區向右擴,發現2時,2區向左擴,
3.當前元素進入2區時,結束。
vector sortthreecolor(vector a, intn)
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, intn)
if(a[i]==2
) }
return
a; }
問題描述:
有乙個整形陣列a,請設計乙個複雜度為o(n)的演算法,算出排序後相鄰兩數的最大差值。
給定乙個int陣列a和a的大小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, intn)
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 原理 用乙個索引位置上的元素,...