資料結構排序演算法

2022-05-05 14:51:09 字數 2517 閱讀 3524

目錄希爾排序

歸併排序

快速排序

選擇排序是一種簡單的基於交換的排序。時間複雜度為o(n^2),演算法的原理是每一次迴圈就確定乙個座標排好序的狀態。

public class main ;

aux = new int[a.length];

mergesort(a);

system.out.println(arrays.tostring(a));

}/**

* 交換

** @param a 陣列

* @param preindex

* @param lastindex

*/private static void swap(int a, int preindex, int lastindex)

/*** 選擇排序

** @param a

*/public static void selectionsort(int a)

swap(a, minindex, i);}}

}

演算法特點:

插入排序與打牌時整理牌的過程是一樣的。我們拿到屬於我們的全部牌後,整理時從左邊開始,依次同前一張牌進行比較,如果較小就進行交換,如果前一張牌比這張牌小,那麼就停止。因為前面的所有牌都比這張牌小了。

/**

* 插入排序

** @param a

*/public static void insertsort(int a)

}}

演算法特點:

這是插入演算法的另一種實現,《演算法》一書中說可以節省時間,但是我還沒有認真思考。這種公升級的實現確實沒有進行交換,但是頻繁的陣列移位應該也是一筆不小時間開銷。ps:《演算法》p168,2.1.25

/**

* 插入排序的公升級版

* @param a

*/public static void insertupdatesort(int a)

//說明temp比a[j-1]要大了,那麼就是a[j]就是它這次迴圈的歸宿。

//或者j=0了,觸發了另乙個終止迴圈的條件。那麼a[j]也是它這次迴圈的歸宿

a[j] = temp;

}}

希爾排序是多次的插入排序,該演算法的思想是每隔h個為一組,對這個組進行排序。排完之後再對下乙個組進行排序。

如:

1,5,9;一組。

2,6,10;二組。

3,7,11;三組;

這都是座標。

當每隔h組排完之後,在每隔h/2成一組再排序,一直到h=1變為了插入排序在最後依次排序。

q:為什麼不直接使用插入排序呢?

a:一般情況下,希爾排序的要比插入排序更快。

/**

* 希爾排序

** @param a

*/public static void shellssort(int a)

}h /= 2;

}}

歸併排序是一種基於分治策略的排序方法。它的主要方法是將陣列一直對半分組,分到每一組中只有乙個數字為止。需要注意的是這些分組並不是乙個新的陣列,而是使用座標記錄下這個虛擬分組的起止位置。這是陣列的「排序」階段。

接下來是歸併。歸併一定是兩個相鄰的陣列才可以歸併,而這兩個陣列之間通過乙個座標進行隔斷。例如:low,mid,high。這裡的mid就是隔斷點。[low,mid]是乙個陣列,[mid+1,high]是另乙個陣列。

/**

* 歸併排序

* @param a

*/public static void mergesort(int a)

/*** 分治

* @param a

* @param lo

* @param hi

*/private static void sort(int a, int lo, int hi)

/*** 歸併操作

* @param a

* @param lo

* @param mid

* @param hi

*/private static void merge(int a, int lo, int mid, int hi)

for (int k = lo; k <= hi; k++)

/*** 篩選出基點

* @param a

* @param lo

* @param hi

* @return

*/private static int partionsh(int a, int lo, int hi)

while (i < j && a[++i] < begin)

if (i >= j)

swap(a, i, j);

}swap(a, lo, i);

return i;

}

資料結構 排序演算法

include include define maxitem 100 typedef char keytype 5 typedef int elemtype typedef struct rec elemnode maxitem 氣泡排序演算法 void bubblesort elemnode r,...

資料結構 排序演算法

排序演算法分為內部排序和外部排序兩大類。內部排序 在計算機記憶體中完成的排序演算法 外部排序 不能再記憶體中文完成,必須在磁碟或者磁帶上完成的排序演算法 內部排序是研究的重點問題,通常我們講的八大排序演算法也主要是講的內部排序演算法。排序演算法的穩定性和時間空間複雜度 本文重點介紹以下幾種排序演算法...

資料結構 排序演算法

直接插入排序是指將r i r n 插入到已經有序的r 1 r i 1 序列中。r 0 是乙個哨兵,起到作為邊界條件並作為暫存單元的作用。實際上,一切為簡化邊界條件而引入的附加節點 元素 均可稱為哨兵。例如單鏈表中的頭結點。對於有n個記錄的集合,要進行n 1趟排序。其最優時間複雜度是o n 平均時間複...