直接插入排序
希爾排序(二分插入)
簡單選擇排序
堆排序歸併排序
快速排序
氣泡排序
桶式排序(基數排序)
插入排序由n-1趟排序組成,對於p=1到p=n-1趟,保證位置0到p上的元素為已排序狀態。在第p趟,將位置p上的元素向左移動到正確位置。
s(n)=o(n^2)
public
static
super anytype>>
void
insertionsort(anytype a)
}
希爾排序通過比較相距一定間隔的元素來工作,各趟比較所用的距離隨著演算法的進行而減小,直到比較相鄰元素的最後一趟排序為止。設增量序列為h[n], h[t]=n/2, h[k]=h[k+1]/2。即從陣列長度的一半開始為原始增量,不斷二分直至為1.
public
static
super anytype>>
void
shellsort(anytype a)
}
簡單選擇排序類似氣泡排序,但是不需要依次相鄰交換,而是新建乙個臨時變數儲存最小值下標,不斷縮小範圍尋找最小值,然後依次排列。
private static>
void choicesort(anytype a)
}if(i!=min)
}}
堆排序就是利用了二叉堆這個特殊資料結構的特性–排列規律,每次能夠刪除根節點(最大或最小值)。每次刪除根節點後,再將根節點放在尾部以實現排序。簡而言之就是對未排序部分做下濾操作後將根節點放於尾部。
/**這裡要利用到堆結構排列在陣列中後的特殊特性。不理解可以先畫個堆自己插入、刪除走一遍,觀察在陣列中的訪問步驟。
*對於陣列中任一位置i上的元素,其左兒子在位置2i上,它的父親在位置[i/2]上。(0位置為空的情況下)
*///堆排序
private
static
intleftchild(int i)
private
static
super anytype>>
void
percdown(anytype a, int i, int n) //三個引數,陣列物件,節點,陣列長度範圍
a[i]=tmp; //相當於a[child]=tmp;就是將a[i]值跟它的字節點互換
}public
static
super anytype>>
void
heapsort(anytype a)
}
歸併排序就是將兩個有序陣列合併,雙指標同時遍歷兩個陣列,比較大小並依次排放在第三個新建的陣列中。通過遞迴地將陣列不斷二分再分別合併,最終會二分至只有1個元素的陣列從而完成排序。
//將兩個有序陣列進行組合的merge方法
public
static
super anytype>>
void
merge(anytype a,anytype tmparray,int leftpos,int rightpos, int rightend)
}//歸併操作的單引數過載方法
public
static
super anytype>>
void
mergesort(anytype a)
快速排序即選取樞紐元,將比它小的放在左邊,大的放在右邊,然後遞迴地對左右兩邊進行快排。關鍵點在於選取樞紐元的方法,這裡採用三數分割法,選取的同時將三個數排序,將樞紐元放在n-1處,可以縮小排序範圍。
//快速排序
public stativsuper anytype>>
void
quicksort(anytype a)
//三數分割法
private
static
super anytype>>
void
median3(anytype a,int left, int right)
//快排主函式
private
static
super anytype>>
void
quicksort(anytype a,int left, int right)
//i指標右移尋找較大的數(>=)
while(a[--j].compareto(pivolt)>0){} //j指標左移尋找較小的數(<=)
if(i//i、j指標沒有相遇則交換i、j指向的值,即大的放右邊小的放左邊
swapreferences(a,i,j);
else
//相遇則跳出
break;
}//最後一步,將i指向的數與放在尾部的中值互換,完成小的在中值左邊,大的在中值右邊
swapreferences(a,i,right-1);
//遞迴地分別對左右兩邊快排
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}else
insertionsort(a,left,right);
}
氣泡排序和選擇排序類似,但是沒有建立臨時變數,而是通過相鄰交換將最大或最小值不斷後移達到依次排序的效果。
private
static
super anytype>>
void
bubblesort(anytype a)
}}
佔坑
資料結構 內排序 Java實現
都說資料結構是我們程式設計師的基本功之一,那麼內排序就是資料結構裡必不可少的重要部分。所以自己在學習這部分內容的同時也希望能給大家帶來更多的東西,希望你能有所收穫!在排序過程中,整張表都是在記憶體中處理,不涉及內 外存的資料交換,稱之為內排序。反之,排序過程中需涉及內外存交換的,稱之為外排序。排序過...
java資料結構排序之希爾排序實現
早上鮮血來潮想寫個希爾排序演算法,發現發生了錯誤,一直不解,最初寫的 如下所示 static void shellsort int datalist,int dk else datalist flag temp print datalist 想呼叫它試試,卻發現 錯誤原因在於紅色 注釋處的判斷條件,...
java資料結構 排序
資料的移動方式,可分為 直接移動 和 邏輯移動 兩種。直接移動改變兩個資料的位置,而邏輯移動,則是改變資料的指標。資料移動使用的記憶體 內部排序,排序的資料量小,可以完全在記憶體中進行。外部排序,排序的資料量無法直接在記憶體內進行排序,而必須使用輔助儲存器。排序演算法的選擇,通常由以下幾點決定 演算...