原创 java算法之基數排序

基本思想 構造一個10*n的二維數組,一個長度爲n的數組用於存儲每次位排序時每個桶子裏有多少個元素。 從低位開始,將所有元素放到對應的桶子(對應二維數組那一列),然後將所有元素按桶子編號拿出來,組成新數組,然後按高位處理。

原创 java算法之希爾排序

基本思想 先將待排序的數組元素分成多個子數組,使得每個子數組的元素個數相對較少,然後對各個子數組分別進行直接插入排序,待整個待排數組“基本有序”後,最後在對所有元素進行一次直接插入排序。 代碼 public class ShellSo

原创 java算法之二分查找

基本思想 將有序序列分成2部分,通過比較,決定查找元素在前半部分還是後半部分,然後遞歸。 代碼 public class BinaryTest { public static int binary(int[] array, i

原创 ArrayList實現

package com.cc.test; import java.util.Iterator; import java.util.NoSuchElementException; public class MyArrayList<E>

原创 java算法之冒泡排序

基本思想 拿數組元素跟下一個元素相比,如果下個元素大,則交換位置,每輪循環得出最大值(冒泡);如此循環,排序完成 代碼 public class BubbleSort { public static void bubbleS

原创 面向對象設計的七大原則

單一職責原則 單一職責原則(Single Responsibility Principle, SRP):一個類只負責一個功能領域中的相應職責,或者可以定義爲:就一個類而言,應該只有一個引起它變化的原因。 一個簡單的例子

原创 java算法之堆排序

堆 堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉節點的關鍵字均不大於(或者不小於)其左右孩子(若存在)節點的關鍵字。 每個結點的關鍵字都不大於其孩子結點的關鍵字,這樣的堆稱爲小根堆。 每個結點的關鍵字都不小於其孩子結點的關鍵字,

原创 java算法之直接插入排序

基本思想: 將一個記錄插入到已排序好的有序數組中,從而得到一個新的有序數組,記錄數增1的有序數組。即:先將數組的第1個記錄看成是一個有序的子數組,然後從第2個記錄逐個進行插入,直至整個數組有序爲止。 代碼 public cla

原创 java算法之快速排序

基本思想 通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。 用到了分治和遞歸的思想。 代碼 public class QuickSort {

原创 java算法之歸併排序

基本思想 待排序序列分爲若干個子序列,每個子序列是有序的。然後再把有序子序列合併爲整體有序序列。 代碼 public class MergeSort { public static void mergeSort(int[]

原创 java算法之簡單選擇排序

基本思想 每一趟從待排序的數據元素中選出最小的的一個元素,順序放在已經排好序的數組的最後,直到全部待排的數據排完序。 代碼 public class SelectSort { public static void selectSor