1:選擇哪種方法實現排序?
2:如何用c語言實現氣泡排序?
3:如何實現乙個通用的氣泡排序?
1:選擇哪種方法實現排序?
在面試的時候,面試官最喜歡問得問題,如果要實現一組資料的排序,那麼你會選擇哪種方法? 氣泡排序?選擇排序?快速排序?希爾排序? 我想,我們最熟悉的莫過於氣泡排序了吧,c語言會提到,到c++會提,資料結構中也會講,足以說明它的重要性;
那麼要實現氣泡排序法,那麼你會首先想到哪種方式呢?哪種最具說服力?
概念:氣泡排序法是一種簡單的排序演算法。它重複地訪問待排序的序列,一次比較兩個元素,如果他們的順序不符合條件要求,就把他們交換過來,訪問序列的工作重複地進行直到沒有帶交換的元素,此時排序完成。
2:用c語言實現氣泡排序
這裡以公升序為例:
//簡單的氣泡排序法(公升序)
#include
#include
void bubble_sort(int arr,int sz)}}
}int main()
; int sz=sizeof(arr)/sizeof(arr[0]);
int i=0;
bubble_sort(arr,sz);
for(i=0;i//列印陣列
return
0;}
執行結果如下:
上述實現方法有很多的缺陷和不足,在面試過程中,這種簡單的氣泡排序肯定是不佔優勢的,那麼,如何寫乙個通用的氣泡排序呢?
3:如何實現乙個通用的氣泡排序?
++使用函式模板及迭代器來實現++
(1)示意圖:
(2)實現程式
//公升序
#include
#include
#include
using
namespace
std;
template
void bubble(iterator first,iterator last)
--last;
}}int main()
; bubble(arr,arr+sizeof(arr)/sizeof(arr[0]));
for(int i=0;i<10;i++)
執行結果:
如果要實現降序排列,那麼,我們只需將上述** bubble函式中的if(*cur>*next)
改為:
if(*cur
程式實現結果如下:
若**量十分大,顯然,要想找到改的這條if語句是有難度的,能不能封裝乙個函式,使得外部使用者通過其提供的介面來改變它到底是公升序還是降序呢? 這就好比收音機的音量鍵,乙個控制聲音調高,另外乙個負責調低音量;至於調高還是調低,只用按動收音機的外部控制開關即可,不關心它內部的具體結構;
下面,我們放出今天的主角:
#include
#include
#include
using
namespace
std;
template
class less//公升序排列
};template
//比較判斷並且交換兩數
void bubble(iterator first,iterator last,compare com)
cur=next;
++next;
}if(!ischange)//如果沒有交換直接返回
--last;
}}//如果外部使用者沒有指定為公升序還是降序,那麼將預設為公升序排列;
template
void bubble(iterator first,iterator last)
int main()
; //第三個引數傳less()時,為公升序排列,情況1
//bubble(arr,arr+sizeof(arr)/sizeof(arr[0]),less());
//第三個引數傳greater()時,降序排列,情況2
//*bubble(arr,arr+sizeof(arr)/sizeof(arr[0]),greater());
//若不傳第三個引數時,預設為公升序,情況3
bubble(arr,arr+sizeof(arr)/sizeof(arr[0]));
for(int i=0;i<10;i++)//列印陣列
執行結果(1)情況1:主函式中傳less();
(2)情況2:主函式中傳greater();
(3)情況3:主函式呼叫函式時不傳第三個引數(控制公升序降序的引數不傳)
這樣一來,函式每一部分的功能顯而易見,同時,就算**由上萬行,百萬行乃至更多,都不用怕找不到排序條件了,在主函式裡呼叫該排序函式引數列表中傳入排序條件即可,排序的效率高,且**不易出錯。
你get到了嗎?
面試你的面試官
大多數面試都是面試官從簡歷,學歷,經歷,技術,為人上對你 乙個求職者 一番拷問,以確定是否是他們想要的人。而這些對找到適合你的工作的確沒什麼用。某公司某職位需要你,而某公司某職位不一定是你想要的!如果你想找到適合你的公司 如果你想找到適合你的職位 記得面試你的面試官,沒錯!做出很重要的職業決定前,面...
面試官都在問 選擇排序
選擇排序的思想不難理解。選擇排序把資料分成兩組來看待,一組已經有序的資料和一組無序的資料,排序開始之前,有序資料的個數為0。每次從未排序的資料中選取最小值,並與未排序的最左資料進行交換,直到未排序的資料為0,則結束排序。演算法過程如下圖所示 3.1 時間複雜度選擇排序每次需要遍歷未排序的資料,尋找最...
面試官的總結
近期2周面試了一些人。有一些感觸。有的人工作幾年,物件導向有幾大特性 各特性之間的差別也不清楚 有的人。問他時,他說,這個簡單,僅僅是我不會,這些理論的東西在平時工作中。用的少。有的人,不清楚過載和重構的差別,然後我說你回去在看看。前幾天,看到一則笑話 一高僧問我 一根魚竿和一筐魚,你選哪個?我說 ...