排序演算法簡介

2021-08-13 02:53:33 字數 1896 閱讀 4498

所有**經過除錯可以執行,只是自己的一些簡單想法的總結,希望大家能多多批評謝謝!!!

所使用到的標頭檔案

#include

#define maxsize 100

typedef

int keytype;

typedef

structrecordtype;

typedef

structtable;

插入排序

直接插入排序

//插入排序最難理解的在哨兵的選取和位置的移動,將第乙個元素預設為已排好序的元素放在中括號中,

比較從第二個元素開始,每進行一次比較哨兵的位置就從第乙個元素後移,直到元素為空。

void insertsort(talbe *tab)

tab->r[j+1]=tab->r[0];

} }

二分插入排序

//二分的思想是在將元素逐漸進入中括號的時候隨著元素的增加,在查詢相應的元素的位置時,使用

二分查詢,簡稱二分插入排序。

void binarysort(table *tab)

for(j=i-1;j>=left;j–)

tab->r[j+1]=tab->r[j];

tab->r[left]=tab->r[0]; } }

選擇排序

//直接選擇排序是將乙個序列的第乙個元素作為最小(最大)元素,再定義乙個j,用於移動到接下來的每乙個元素,來與第乙個元素進行比較,找到最大或者最小的元素便交換位置,以此類推。

void selectsort(table *tab)

if(k!=i)

}}

//樹形選擇排序思想 一組排序碼,兩兩進行比較,選出最大值,就像二叉樹,兩個葉子節點進行比較選出的最大值就是一顆子數的樹根,依次進行下去,排序好的元素在其原來位置用正無窮大代替。如果帶排序序列為奇數個,則增加乙個正無窮大(或者比所有排序序列大的元素作為節點插入)。

//堆排序原理可以用二叉樹表示,二叉樹的根便是待排序元素中最小(最大)的元素,依次進行比較直到所 有元素均進入二叉樹(分為小根堆和大根堆)。

void sift(table *tab,int k,int m)   //篩選演算法,將任意乙個排序碼序列建成堆。

}tab->r[i]=tab->r[0];

}void heapsort(table *tab)

}

交換排序

//氣泡排序就是乙個待排序序列兩兩之間進行比較如果符合條件就進行交換,通常要進行多次交換。

void bubblesort(table *tab)

i++;

}}

//快速排序主要運用遞迴進行運算,首先選取乙個標誌元素將其放在其最終排序完應該放置的位置,然後對剩下的元素進行排序,做到標誌元素之前的元素都不大於它,標記元素之後的元素都不小於它,依次對前後兩部分進行遞迴呼叫。(在放置元素時不大於x的元素從第乙個位置開始由左向右進行放置,將大於x的元素從最後乙個位置由右向左順序放置)。

while(itab->r[i].key>tab->r[0].key) i++;

if(itab->r[j].key=tab->r[i].key;

j--;

}}while(i!=j);

tab->r[i]=tab->r[0];

quicksort(tab,left,i-1);

quicksort(tab,i+1,right);

}} //歸併排序簡單而言就是對一組待排序陣列每次按照len的長度分組,將相鄰兩個分組進行排序合併為乙個陣列,進行完畢後從len/2變為len/4,稱為一趟歸併,依次進行進行排序,直到有序段長度不小於待排序檔案長度,排序完成。

氣泡排序 排序演算法簡介

根據排序過程中的主要操作,可以將內排序分為以下幾種 插入排序 直接插入排序,希爾排序 改進的直接插入排序 交換排序 氣泡排序,快速排序 改進的氣泡排序 選擇排序 簡單選擇排序,堆排序 改進的簡單選擇排序 歸併排序 歸併排序 本次主要介紹氣泡排序,接下來,將會陸續介紹以上各種排序演算法,以 加圖標的方...

學習排序演算法簡介

學習排序演算法簡介 學習排序 learning to rank,ltr 是一類基於機器學習方法的排序演算法。傳統經典的模型,例如基於tfidf特徵的vsm模型,很難融入多種特徵,也就是除了tfidf特徵之外,就無法融入其他種類的特徵了。而機器學習的方法很容易融合多種特徵,而且有成熟深厚的理論基礎,引...

排序演算法 基數排序簡介

基數排序也是一種穩定排序演算法,且一般計數排序被用在基數排序過程中。基數排序包括 lsd least significant digital 和 msd least significant digital 兩大類。lsd 基數排序的思想非常直觀 假設乙個陣列的最高位有 d dd 位,那麼依次從低位向...