首先討論插入排序演算法的思想:每趟將乙個元素,按照其關鍵字值的大小插入到它前面已排序的子串行中,依次重複,直到插入全部元素。
1.直接插入排序演算法:
1>第i趟,前面有i個元素是已經排序的。(1≤i<n)將ai插入到a0-ai-1這一串行的適當位置
2>重複執行n-1趟
**實現:
public void straightinsert(int nums),比較n-1次,移動2(n-1)次,時間複雜度o(n)
最壞情況,複雜度o(n2)
直接插入排序演算法時間效率在o(n)到o(n2)之間,初始陣列越有序,時間效率越高,temp占用乙個儲存單元,空間複雜度為o(1).
2.希爾排序(縮小增量排序)
由直接插入排序演算法可以知道,資料序列越有序,時間效率越高。或者陣列內元素數量越小,時間效率越高。希爾排序正是基於這個思想
希爾排序演算法描述如下:
1>將乙個資料序列分成若干組,每組由若干相隔一段距離(增量)的元素組成,在這個組內進行直接插入排序演算法
2>增量初值通常設為資料序列長度的一半,以後每趟增量減半,最後值為1,隨著增量減小,組數也減少,組內元素增加,資料序列接近有序。
public void shellsort(int nums)
}} }
每一趟挑出未排序序列中的最大值放到未排序序列的最後一位。
4.快速排序
1>設兩個指標i和j,初值分別為0和nums.length-1。並設樞軸元素nums[0]賦給pivot
2>j從右往左掃瞄,如果元素大於pivot,則j--。直到出現小於pivot的元素nums[j],將a[j]值賦給nums[i]。此時nums[j]相當於空單元,並執行i++一次。
3>i從左到右掃瞄,如果元素小於pivot,則i++。直到出現大於pivot的元素nums[i],將nums[i]賦給nums[j]。此時nums[i]相當於空單元,並執行j--一次。
4>重複執行2和3,直到i>=j。此時nums[i]是空單元,將pivot賦給nums[i]。
5>上述四步的方法會return出乙個i值。在i左側,都是小於nums[i]的,在i右側,都是大於nums[i]的。對左右兩部分子串行進行遞迴操作。直至全部排序完畢
public int partition(int nums,int low,int high)
if(low
快速排序(java 語言實現)
package com.shan.quicksort 快速排序是由c.a.r.hoare 開發的,該演算法在陣列中選擇乙個稱為主元 pviot 的元素將陣列分為兩部分,是的第一部分的元素全部小於或等於主元,而第二部分的元素全部大於主元。對第一部分遞迴地使用快速排序,對第二部分遞迴地使用快速排序。au...
八種排序演算法 Java實現
基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。實現 public class selectsort selectsort a for int i 0 i public static v...
八種基本的排序(1) 氣泡排序(C語言實現)
目錄氣泡排序 bubble sort 原理時間複雜度 演算法穩定性 源 注釋 我的部落格 是一種電腦科學領域的較簡單的排序演算法。1 它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要...