一道關於排序的面試題

2021-08-01 19:01:38 字數 701 閱讀 6135

以前見群裡發了一道面試題:

兩個已排好序陣列,a和b,現要求對他們重新聯合排序,合以的小數放入a陣列中,大的數放入b中。

這題的關鍵是兩個陣列已經排好序,如果按傳統的方法,進行排序當然沒問題,但就沒有充分利用現有的條件。

或許你可以想到插入排序,這樣就可以利用a陣列已排好序的優勢對其進行排序了。但傳統的插入排序確沒有考慮到b陣列也已排好序,我試過用插入序序的方式解決這個問題,但在連寫了兩個if,else之後,我放棄了。(我最討厭寫if,else,而且我也意識到插入排序不能很好地利用現有條件)。除了插入排序之外,我腦海中已出了幾種算了,但所想到的所有演算法中都要涉及陣列移位問題(而且還要寫if,else)。有沒有人種演算法,只要交換兩個陣列中資料就可以了呢?

如果將a中的所有元素與b中的無素進行比較,且如果a[i]>b[i],就將a[i]與b[i]互換位置,這樣a[0],中的元素將是兩個陣列中最小的元素,而b[b.length-1]將是兩個集合中最大的元素。接著我們們從兩個陣列中去除掉a[0]與b[b.length-1],再重複上面的操作。

@override

public void sort(integer arraya, integer arrayb)

}private void insert2b(integer arrayb, int cur)

array[i+1] = number;

}}

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...