目錄希爾排序
歸併排序
快速排序
選擇排序是一種簡單的基於交換的排序。時間複雜度為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;一組。當每隔h組排完之後,在每隔h/2成一組再排序,一直到h=1變為了插入排序在最後依次排序。2,6,10;二組。
3,7,11;三組;
這都是座標。
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 平均時間複...