排序算法思想總結|排序算法思想總結(推薦12篇)
發布時間:2022-05-28排序算法思想總結(推薦12篇)。
? 排序算法思想總結
一、教材分析
《對數據進行排序和篩選》是初中信息技術八年級下冊第5單元《數據分析和管理》第1課時內容。本節課是在前幾節課學習了數據輸入、工作表的編輯以及對數據運算等基本知識的基礎上,進一步學習對數據進行排序和篩選。本課共由三個部分組成,分別是簡單排序、復雜排序、自動篩選,是對前面所學知識的一個綜合運用,也是以后學習用圖表表示數據的重要基礎。通過本節課的學習能讓學生學會排序和篩選的'操作方法,在生活中能用這些方法解決實際問題,達到學以致用。
二、學情分析
學生通過前面各單元內容的學習,對數據的輸入、編輯、運算有了一定的操作能力,排序和篩選對學生來說在實際生活中應用十分廣泛,如比賽成績的排名、優秀選手的篩選等,如果能夠掌握EXCEL排序與篩選的操作方法,將大大地提高學生解決問題的能力。但基于他們年齡的特征,他們對理論性強的知識點不易理解,認知較直觀,而對具體操作易于接受。另外因諸多因素的不同,造成他們對信息技術的認知能力、實際操作能力、知識水平各不相同,形成了不同的層次。因此我在教學中利用任務驅動、自主探究,從而讓學生掌握排序與篩選的操作。
三、教學目標
1、知識與技能
學會排序和篩選的操作方法
2、過程與方法
通過對數據排序和篩選,讓學生理解排序、篩選的意義;理解排序和篩選在數據管理中的作用。
3、情感態度和價值觀
? 排序算法思想總結
這里實現了選擇數組里面最小值的代碼,讀者可以以此類推自己寫出選擇最大值的算法
/** * 找到最小的元素 * @param array 輸入的數組 * @param arraySize 數組大小 * @param minNumber 輸出最小值 * @return 最小值在數組里面的位置 */size_t findMin(int array[] , int arraySize , int * minNumber){ if(array == NULL || arraySize <= 0 || minNumber == NULL) return -1; int minPos = -1; int minNumberTemp=INT_MAX; for (int i = 0; i < arraySize; ++i) { if(array[i] < minNumberTemp) {minNumberTemp=array[i];minPos = i; } } *minNumber = minNumberTemp; return minPos;}
運行結果:
input array is :
48 18 97 27 13 85 8 38 95 31
find the min number 8 at pos 7
我們從代碼里面可以看出for循環運行n次,每次都要進行一次比較if(array[i] < minNumberTemp),如果我們標記的最小值大于當前的數組元素,就重新標記當前數組元素為最小值。因為這個代碼比較簡單,這里不再贅述。
選擇算法之選取最大數和最小數
條件改變,現在要選擇一個序列里面的最大數和最小數,這里和上面講述過的選擇最大數或者最小數有所不同,上面的要做的只是選擇最大值或者最小值,而現在我們要同時選擇最大值和最小值。
博主第一次看見這個題目時,和只選擇最小數的情形一對比,這不是一樣的么,只要在循環里面多加一個最大數的比較不就行了?的確是可以,我們來看一下部分代碼實現
? 排序算法思想總結
在使用wps處理數據的時候難免會遇到要使用排序的情況,而有些時候的排序又并不是單單的按照日期或者數字來排序,往往要根據實際的情況來進行排序工作,這使得的一些對排序功能不是特別了解的人來說無疑是一種痛苦,在這里我就教教大家怎么使用wps排序中的自定義排序哦首先呢我們舉個栗子,以一個簡單的表格為例
比如說我們希望以學歷的高低來排序,那么我們首先要準備自定義的排序序列,以逗號隔開,要注意的是這里的逗號是英文輸入法下的逗號哦,不要用中文輸入法下的標點哦,把這個序列復制下來
然后我們要做的是點擊wps左上方的wps表格按鈕,然后選取選項按鈕
在選項中呢,我們選擇自定義序列標簽、
在自定義序列的右邊,輸入序列的框中把前面復制的序列順序粘貼下來,點擊添加之后點擊確認,然后在數據中選擇排序
選擇好你自己定義的序列,跟行列,方式然后點擊確認就完成了,
,
? 排序算法思想總結
拓撲排序是對有向無圈圖的頂點的一種排序,它使得如果存在一條從vi到vj的路徑,那么在排序中Vj出現在Vi后面,一個簡單的求拓撲排序的算法是先找出任意一個沒有入邊的頂點,然后我們顯示該頂點,并將它和它的邊一起從圖中刪除。然后為們對圖的其余部分應用同樣的方法處理。但是這個方法有一點不好,就是每次都要找入度為0的頂點,這種頂點一般很少,如果圖很大的話,每次都遍歷一遍就浪費很多時間。升級版是先計算每一個頂點的入度,然后將入度為0的頂點存入隊列,操作完之后再更新入度。這樣就不用遍歷整個圖而只需要從出隊列操作就可以了。下面是代碼,隊列的操作在上一篇文章中已經實現,只要把類型改成節點的指針即可。
topSort.h
#ifndef __TOPSORT_H#define __TOPSORT_Hstruct graph;struct listNode;typedef struct graph *Graph;typedef struct listNode *Vertex;struct graph{ int numberOfVertex; Vertex *vertexs;};struct listNode{ int indegree; int vertexnumber; Vertex next;};void topSort(Graph G);Graph initinalizeAdjList(int listSize);Graph insertAdjList(Graph G,int pos,int a[],int N);#endif
topSort.c
#include topSort.h#include queue.hvoid topSort(Graph G){ Queue Q; Vertex V,W; int counter=0; int i; Q=createQueue; for(i=1;i<=G->numberOfVertex;i++)//找到入度為0的點,將它們入隊列 { if(G->vertexs[i]->indegree==0) EnQueue(G->vertexs[i],Q);} while(!isEmpty(Q))//刪除該點,然后將其相鄰的點入度減1,再重新檢測入隊列 { V=DeQueue(Q); printf( %d ,V->vertexnumber); counter++; for(i=1;i<=G->numberOfVertex;i++) { if(isAdj(G->vertexs[i],V)) { if((--G->vertexs[i]->indegree)==0) EnQueue(G->vertexs[i],Q); } } } if(counter!=G->numberOfVertex) { printf(Graph has a cycle); exit(-1); } deleteQueue(Q);}Graph initinalizeAdjList(int listSize)//初始化一個鄰接表,就是創建一個指針數組,每個元素只想一個節點{ Graph G; int i; G=(Graph)malloc(sizeof(struct graph)); if(G==NULL) { printf(out of space); exit(-1); } G->numberOfVertex=listSize; G->vertexs=(Vertex*)malloc(sizeof(Vertex)*(listSize+1)); for(i=1;i<=listSize;i++)//這里簡單的直接給出節點編號,實際中可以用哈希的方法來獲得 { G->vertexs[i]=(Vertex)malloc(sizeof(struct listNode));//初始化節點 G->vertexs[i]->vertexnumber=i; G->vertexs[i]->next=NULL; } return G;}Graph insertAdjList(Graph G,int pos,int a[],int N)//根據給出的數組來給鄰接表插入元素{ int j; Vertex v,w; G->vertexs[pos]->indegree=N; w=G->vertexs[pos]; for(j=0;j
main.c
#include queue.h#include topSort.hint main(){ Graph G; int i; int a1[]={2,4,3}; int a2[]={4,5}; int a3[]={6}; int a4[]={6,7,3}; int a5[]={4,7}; int a7[]={6}; G=initinalizeAdjList(7); insertAdjList(G,1,a1,3); insertAdjList(G,2,a2,2); insertAdjList(G,3,a3,1); insertAdjList(G,4,a4,3); insertAdjList(G,5,a5,2); insertAdjList(G,6,a5,0); insertAdjList(G,7,a7,1); for(i=1;i<=7;i++) { Vertex v; v=G->vertexs[i]; while(v) { printf( %d ,v->vertexnumber); v=v->next; } printf(); } topSort(G);}
? 排序算法思想總結
活動目標
1、培養幼兒的觀察、比較能力和思維的靈敏性。
2、學習按物體的顏色排序。
3、在游戲中讓幼兒體驗與同伴團結協作的樂趣。
4、有興趣參加數學活動。
5、能與同伴合作,并嘗試記錄結果。
重點難點
重點:培養幼兒的觀察能力。
難點:四種顏色的排序。
活動準備
紅、黃、藍、綠的珠子若干,串繩若干,紅、黃、藍、綠的頭飾若干,火車頭粘貼一個,紅、黃、藍、綠車廂粘貼若干。
活動過程
一、開始部分:
(1)大二班的小朋友最會串珠子了,今天楊老師就是寶石商人,我來收購小朋友做的手鏈,看看誰做的手鏈最漂亮。
(2)幼兒自由串珠子。
二、基本部分:
1、操作活動:串手鏈。
(1)引導幼兒觀察所串珠子的顏色排列特點。(重點)
(2)以寶石商訂購的形式讓幼兒按紅黃、紅黃藍、紅黃藍綠的排序串珠?;顒又欣蠋熭o導并讓幼兒互相幫助完成。
2、游戲活動:小火車。
玩法:小朋友戴上紅、黃、藍、綠的頭飾,老師邊念:“小火車真漂亮,紅黃紅黃一節節?!边叞鸦疖囌迟N出來,然后老師做火車頭小朋友根據自己的頭飾按兒歌要求排列做車廂。老師根據幼兒能力及游戲的熟練程度來定火車的顏色排序。紅黃藍綠的排序是難點,讓能力強的小朋友提醒能力弱的小朋友。
三、結束部分:
小結游戲情況,鼓勵幼兒。
四、延伸部分:
小朋友我們今天做的手鏈顏色豐富、排列有規律,這樣的手鏈很漂亮,我們把這樣漂亮的手鏈畫出來給爸爸、媽媽看,好嗎?
教學反思
因為所選內容是幼兒平時接觸、有興趣的,所以幼兒接受快。在開始部分幼兒自由串珠子時,就有很多孩子會按顏色排序來串了,后經觀察排序規律小朋友們都能按要求串珠子了。在活動中讓幼兒互相幫助使每一位幼兒都能完成任務,并體驗交流、游戲的樂趣。
? 排序算法思想總結
運行結果: before sort the array: 75 84 30 35 77 60 75 32 64 2 lefy—>0 right—>9 index:0 midNumber :75 lefy—>0 right—>6 index:1 midNumber :32 lefy—>0 right—>1 index:1 midNumber :30 2th max number is———————- 30 2 30 32 60 75 64 35 75 84 77 lefy—>0 right—>9 index:0 midNumber :32 lefy—>0 right—>1 index:1 midNumber :2 1th max number is———————- 2 2 30 32 60 75 64 35 75 84 77 lefy—>0 right—>9 index:0 midNumber :32 3th max number is———————- 32 30 2 32 60 75 64 35 75 84 77 lefy—>0 right—>9 index:0 midNumber :32 lefy—>3 right—>9 index:4 midNumber :84 lefy—>3 right—>8 index:4 midNumber :75 lefy—>3 right—>6 index:5 midNumber :35 lefy—>4 right—>6 index:5 midNumber :75 lefy—>4 right—>5 index:5 midNumber :60 lefy—>5 right—>5 index:5 midNumber :64 6th max number is———————- 64 2 30 32 35 60 64 75 75 77 84 after sort the array: 2 30 32 35 60 64 75 75 77 84 注:本文中的所有代碼都在這里/** * 找到數組中的中位數 * @param array 輸入的數組 * @param lefyBorder 數組左邊界 * @param rightBorder 數組右邊界 const int & arraySize = rightBorder - leftBorder+1; * @return 中位數的坐標 */int BFPRT(int array[] , int leftBorder , int rightBorder){ if(array == NULL || leftBorder >rightBorder ) return -1; const int & arraySize = rightBorder - leftBorder +1; // 判斷元素的個數是否大于五個 if(arraySize <= 5) { insertSort(array , arraySize); return leftBorder+arraySize/2; } // 如果元素個數大于五個,那么就五五分組 const int & groupSize = 5; int * groupStart=array; int midCount=0; for (int i = leftBorder+groupSize; i <= rightBorder; i+=groupSize) { insertSort(groupStart , groupSize); exchange(array , leftBorder+midCount , i-3 );//將中位數放在數組的最前面 ++midCount; groupStart+=groupSize; } // 剩下的不滿五個進行排序 if(arraySize%groupSize != 0) { insertSort(groupStart , arraySize%groupSize); exchange(array , leftBorder+midCount ,leftBorder + arraySize - arraySize%groupSize + (arraySize%groupSize - 1)/2); ++midCount; } // 現在新選出來的所有中位數都在前midCount里面 // 返回中位數的中位數 return BFPRT(array , leftBorder , leftBorder+midCount-1);}/** * 選擇第K大的元素 * @param array 輸入的數組 * @param leftBorder 左邊界 * @param rightBorder 右邊界 * @param k 第k個 * @param kthNumber 第k大的數 */void BFPRTselect(int array[] , int leftBorder , int rightBorder ,int k , int * kthNumber){ if(array == NULL || leftBorder >rightBorder || kthNumber == NULL || k >(rightBorder - leftBorder + 1)) return ; /** 選取主元 */ int index = BFPRT(array , leftBorder , rightBorder); if(index == -1) return; cout<”<
? 排序算法思想總結
綜合排序的工作總結綜合排序是信息檢索領域中重要的一種排序算法。其作用是根據不同的評價指標,綜合多個信息因素對數據進行排序,從而獲得更加精準的搜索結果。在實際的工作中,綜合排序算法被廣泛應用于搜索引擎、電子商務、社交網絡等多個領域。本文將對綜合排序的工作流程進行總結,介紹其應用場景和優化方法。
一、綜合排序的工作流程
綜合排序的工作流程主要分為以下三個步驟:
1. 特征提取和權重設置
特征提取是綜合排序的關鍵環節,它是指將待排序的數據進行特征抽取,生成代表數據的特征向量。通常情況下,特征提取包括文本特征、圖像特征、社交網絡特征等。在提取特征的同時,需要考慮不同特征的相對重要性,為每個特征設置不同的權重。對于某些特定領域的數據,通常需要通過專業知識和經驗來設置權重,從而更好地反映數據的本質特征。
2. 綜合評價和排序
在特征提取和權重設置完成后,綜合排序算法開始對數據進行評價,其中包括基于內容的相似性、用戶喜好度、時效性、流行度、質量等多個指標。評價結果最終會被用于生成一個排序函數,來決定每個數據的位置。常見的排序算法包括PageRank、TF-IDF、BM25、SVM等。
3. 評估和反饋優化
綜合排序算法是一個迭代式的過程,在實際應用中需要不斷調整和優化。評估和反饋優化是一項重要的工作,它可以幫助我們發現算法中的問題,并適時進行改進。評估和反饋優化主要包括以下兩個環節:
(1)排序結果的評估:這一步用于評估算法的性能和優化方向。通常我們會采用F1-score、AUC、MAP等指標來衡量算法的準確性和效率。如果算法存在問題,我們需要優化特征提取、評價方式、權重設置等方面。
(2)反饋優化:這一步根據評估結果對算法進行優化。比如,我們可以通過增加或減少某些特征的權重來優化算法效果;或者加入新的特征或評價指標,提高算法的精準度。
二、應用場景
綜合排序算法在信息檢索、電子商務、社交網絡等領域都有廣泛應用:
1. 信息檢索領域。綜合排序對于搜索引擎的結果排序非常重要。比如,谷歌搜索就是基于PageRank算法進行排序的。
2. 電子商務領域。綜合排序可以幫助電子商務網站更好地挖掘用戶的購物喜好,提高用戶購買轉化率。
3. 社交網絡領域。綜合排序可以用于社交網絡的內容推薦、好友推薦等方面。比如Facebook會根據用戶的興趣愛好、歷史行為等信息,幫助用戶推薦內容或好友。
三、優化方法
綜合排序算法的優化主要有以下幾個方面:
1. 特征選擇。在特征提取時,要盡可能選取對任務有幫助的關鍵特征,避免選取無關或冗余的特征。
2. 權重設置。權重設置要合理公正,根據實際情況加以調整。
3. 數據清洗。對于不規則的數據需要先進行數據清洗,避免干擾綜合排序結果。
4. 排序算法優化。綜合排序算法會涉及到較多的計算,可以通過緩存、多線程等方式進行優化。
綜合排序是信息檢索領域中重要的排序算法。通過合理的特征提取和權重設置,綜合多個評價指標進行排序,能夠更好地反映數據的本質特征和用戶需求,提高搜索效率和準確性。在實際的應用中,我們需要不斷進行評估和反饋優化,結合應用場景和數據特點,進行算法優化,以滿足用戶需求。
? 排序算法思想總結
總是信任你的同伴,卻也要不斷占據主動,以決定你與誰搭檔;
總是相信上帝,但永遠要把你的房子建在高處;
永遠愛你的鄰居,并且總是選擇居住在芳鄰的隔壁;
賽跑未必快者贏,戰爭未必強者勝,但快與強是你最好的選擇;
把你的賭注壓在“轉向另一面”和“適可而止”之間,把你的賭注押在“欲速則不達”和“當斷不斷,反受其亂”之間;
關于贏:它不重要,真正重要的是光明磊落、遵守游戲規則;
關于輸:它不重要,真正重要的是你樂在其中;
關于怎么玩游戲:贏。
? 排序算法思想總結
活動目標
1、引導幼兒學習區別寬窄,并能用詞表達。
2、讓幼兒學習按照寬窄的差異進行正逆排序,初步體驗序列中物體的相對性和可變性。
活動準備
1、教具:一個信封,內有一張光盤。每人兩張寬窄、顏色各不同的紙條:黃色的寬,綠色的窄。
2、 學具:第一組:寬窄排序材料(同顏色、同長度、寬窄不同);
第二組:寬窄排序材料(不同顏色、同長度、不同寬窄);
第三組:寬窄排序材料(顏色、長度、寬窄均不同);
活動重點
引導幼兒學習按照物體寬窄的差異進行正逆排序。
活動難點
引導幼兒不受物體顏色、形狀、材料的干擾,進行寬窄差異的排序,并在選擇的過程中強化幼兒對序列中物體的相對性和可變性的體驗。
活動過程
一、 看光盤(集體活動)
互動問題:小朋友們,今天老師收到一封信,我們一起看看好嗎?
放光盤,電視里出現綠泡泡的形象:小朋友們,你們好,我是綠泡泡,我和紅果果、小咕咚在泡泡飛船航行時遇到困難了。有一個國家的國王出了三道題,如果我們答對了,就可以回到智慧樹;如果答錯了,就只能留在這個國家了?,F在我們需要你們的幫助,聰明的小朋友們快幫幫我們吧,我們很想回到智慧樹與你們在一起。
指導要點:指導幼兒能分清2張紙,黃色的寬,綠色的窄。
二、第一題:(集體活動)
出示第一組:寬窄排序材料(同顏色、同長度、寬窄不同);
1、互動問題:小朋友們,你們怎樣知道哪個寬、哪個窄?從最寬到最窄的怎樣排序嗎?
2、指導要點:老師啟發幼兒用重疊比較的方法區別寬窄。在這里找出最寬的,再在這里找出最寬的,依次進行排序。
三、第二題:(集體活動)
出示第二組:寬窄排序材料(不同顏色、同長度、不同寬窄);
1、互動問題:看看這些紙有什么一樣的?有什么不一樣的?從寬到窄排序?從窄到寬排序?
2、指導要點:幼兒能說出顏色不一樣,長度一樣,寬窄不一樣。用重疊法區分寬窄。
四、第三題:(集體活動)
出示第三組:寬窄排序材料(顏色、長度、寬窄均不同);
1、互動問題:請大家用重疊比較的方法區分紙條的寬窄
2、指導要點:老師重點指導幼兒用重疊比較的方法區分紙條的寬窄。幼兒操作,老師檢查。(幼兒邊操作邊講述:從怎樣排到怎樣。)
五、看光盤:(集體活動)
綠泡泡:謝謝,聰明的小朋友們,國王已經看過你們的答案了,我和紅果果、小咕咚已經回到智慧樹了。謝謝你們的幫助。
活動延伸
將三組的材料投放到區域中,幼兒進行闖關游戲,進行寬窄排序。
? 排序算法思想總結
快速法定義了三個參數,(數組首地址*a,要排序數組起始元素下標i,要排序數組結束元素下標j).
它首先選一個數組元素(一般為a[ (i+j)/2 ],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。
然后運用遞歸,在將它左,右兩個子數組排序,最后完成整個數組的排序。
下面分析其代碼:
[cpp] view plaincopy
void quick(int *a,int i,int j)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*選取的參照*/
do
{
while( a[m] m++; /* 從左到右找比k大的元素*/ while( a[n] >k && n>i ) n--; /* 從右到左找比k小的元素*/ if(m<=n) { /*若找到且滿足條件,則交換*/ temp=a[m]; a[m]=a[n]; a[n]=temp; m++; n--; } } while(m<=n); if(m quick(a,m,j); /*運用遞歸*/ if(n>i) quick(a,i,n); }
為幫助同學們學好java算法,yjbys小編為大家分享最新java算法——字符組合排序試題和答案如下:
題目:
用1、2、2、3、4、5這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。
不是特別難的題目,暴力算和用圖論算(深度遍歷)都可以,結果是198.圖論的'話就是構造無向圖,然后深度優先遞歸。
package com.graphic;
import java.util.Iterator;
import java.util.TreeSet;
public class CharSequence {
private String[] c = {"1","2","2","3","4","5"};
private int n = c.length;
private boolean[] visited = new boolean[n];
private int[][] g = new int[n][n];
private TreeSetts = new TreeSet();
private String result = "";
public CharSequence(){
for(int i=0; i
for(int j=0; j
if(i == j) g[i][j] = 0;
else g[i][j] = 1;
}
}
g[3][5] = 0;
g[5][3] = 0;
}
public void depthFirst(int index){
visited[index] = true;
result += c[index];
if(result.length() == n){
ts.add(result);
result = result.substring(0,result.length()-1);
visited[index] = false;
}
else{
for(int i=0; i
if(!visited[i] && g[index][i] == 1){
depthFirst(i);
}else continue;
}
result = result.substring(0,result.length()-1);
visited[index] = false;
}
}
public void graphicGet(){
for(int i=0; i
depthFirst(i);
}
int count = 0;
System.out.print("圖論的結果:");
Iteratorit = ts.iterator();
while(it.hasNext()){
String tmp = it.next();
if(ntains("35")) continue;
if(ntains("53")) continue;
if(tmp.charAt(3) == '4') continue;
System.out.println(tmp);
count++;
}
System.out.println("共計:"+count+"個");
}
public void bruteForce(){
System.out.println("暴力搜的結果:");
int count = 0;
for(int i = 122345; i<543222; i++){
String tmp = ""+i;
if(tmp.charAt(3) == '4') continue;
if(ntains("35")) continue;
if(ntains("53")) continue;
if(ntains("5") && ntains("4") && ntains("3") && ntains("1"))
{
int index = tmp.indexOf("2");
if(index == -1) continue;
if(index == tmp.length()-1) continue;
if(tmp.substring(index+1).contains("2")){
System.out.println(tmp);
count++;
}
}
}
System.out.print("共計:"+count+"個");
}
public void recrusive(){
}
public static void main(String[] args) {
CharSequence cs = new CharSequence();
//圖論的方法
cs.graphicGet();
//暴力搜索
cs.bruteForce(); 運行結果: before sort the array: lefy—>0 right—>9 index:0 midNumber :75 lefy—>0 right—>6 index:1 midNumber :32 lefy—>0 right—>1 index:1 midNumber :30 lefy—>0 right—>9 index:0 midNumber :32 lefy—>0 right—>1 index:1 midNumber :2 lefy—>0 right—>9 index:0 midNumber :32 lefy—>0 right—>9 index:0 midNumber :32 lefy—>3 right—>9 index:4 midNumber :84 lefy—>3 right—>8 index:4 midNumber :75 lefy—>3 right—>6 index:5 midNumber :35 lefy—>4 right—>6 index:5 midNumber :75 lefy—>4 right—>5 index:5 midNumber :60 lefy—>5 right—>5 index:5 midNumber :64 after sort the array:? 排序算法思想總結
?實習報告網刷屏級內容推薦:
? 排序算法思想總結
/** * 找到數組中的中位數 * @param array 輸入的數組 * @param lefyBorder 數組左邊界 * @param rightBorder 數組右邊界 const int & arraySize = rightBorder - leftBorder+1; * @return 中位數的坐標 */int BFPRT(int array , int leftBorder , int rightBorder){ if(array == NULL || leftBorder > rightBorder ) return -1; const int & arraySize = rightBorder - leftBorder +1; // 判斷元素的個數是否大于五個 if(arraySize <= 5) { insertSort(array , arraySize); return leftBorder+arraySize/2; } // 如果元素個數大于五個,那么就五五分組 const int & groupSize = 5; int * groupStart=array; int midCount=0; for (int i = leftBorder+groupSize; i <= rightBorder; i+=groupSize) { insertSort(groupStart , groupSize); exchange(array , leftBorder+midCount , i-3 );//將中位數放在數組的最前面 ++midCount; groupStart+=groupSize; } // 剩下的不滿五個進行排序 if(arraySize%groupSize != 0) { insertSort(groupStart , arraySize%groupSize); exchange(array , leftBorder+midCount ,leftBorder + arraySize - arraySize%groupSize + (arraySize%groupSize - 1)/2); ++midCount; } // 現在新選出來的所有中位數都在前midCount里面 // 返回中位數的中位數 return BFPRT(array , leftBorder , leftBorder+midCount-1);}/** * 選擇第K大的元素 * @param array 輸入的數組 * @param leftBorder 左邊界 * @param rightBorder 右邊界 * @param k 第k個 * @param kthNumber 第k大的數 */void BFPRTselect(int array , int leftBorder , int rightBorder ,int k , int * kthNumber){ if(array == NULL || leftBorder > rightBorder || kthNumber == NULL || k >(rightBorder - leftBorder + 1)) return ; /** 選取主元 */ int index = BFPRT(array , leftBorder , rightBorder); if(index == -1) return; cout<”<
我們精彩推薦排序算法思想總結專題,靜候訪問專題:排序算法思想總結
