一、氣泡排序
/*** 氣泡排序
* 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
* 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
* 針對所有的元素重複以上的步驟,除了最後乙個。
* 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
* @param numbers 需要排序的整型陣列
*/public static void bubblesort(int numbers)}}
}二、快排
/*** 查詢出中軸(預設是最低位low)的在numbers陣列排序後所在位置
* * @param numbers 帶查詢陣列
* @param low 開始位置
* @param high 結束位置
* @return 中軸所在位置
*/public static int getmiddle(int numbers, int low,int high)
numbers[low] = numbers[high];//比中軸小的記錄移到低端
while(low < high && numbers[low] < temp)
numbers[high] = numbers[low] ; //比中軸大的記錄移到高階
}numbers[low] = temp ; //中軸記錄到尾
return low ; // 返回中軸的位置
}/**
* * @param numbers 帶排序陣列
* @param low 開始位置
* @param high 結束位置
*/public static void quicksort(int numbers,int low,int high)
/*** 快速排序
* @param numbers 帶排序陣列
*/public static void quick(int numbers)
}三、歸併
/*** 歸併排序
* 簡介:將兩個(或兩個以上)有序表合併成乙個新的有序表 即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列
* 時間複雜度為o(nlogn)
* 穩定排序方式
* @param nums 待排序陣列
* @return 輸出有序陣列
*/public static int sort(int nums, int low, int high)
return nums;
}/**
* 將陣列中low到high位置的數進行排序
* @param nums 待排序陣列
* @param low 待排的開始位置
* @param mid 待排中間位置
* @param high 待排結束位置
*/public static void merge(int nums, int low, int mid, int high) else
}// 把左邊剩餘的數移入陣列
while (i <= mid)
// 把右邊邊剩餘的數移入陣列
while (j <= high)
// 把新陣列中的數覆蓋nums陣列
for (int k2 = 0; k2 < temp.length; k2++)
}四、堆排
public class heapsort ;
int arraylength=a.length;
//迴圈建堆
for(int i=0;i=0;i--)
} //如果k節點的值小於其較大的子節點的值
if(data[k]}//交換
private static void swap(int data, int i, int j)
}
常用排序演算法
筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...
常用排序演算法
一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...
常用排序演算法
排序演算法 最好時間 平均時間 最壞時間 輔助空間 穩定性 直接插入排序 o n o n 2 o n 2 o 1 穩定 希爾排序 o n 1.3 o 1 不穩定 直接選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 堆排序 o n x lbn o n x lbn o n x lbn o ...