排序演算法小結
插入排序
其它排序
將陣列遍歷,第乙個數與第二個數比較,把較小的數拿出來,再與第三個數比較,把最小的數拿出來,迴圈一次,把最小的數拿出來了,第二次迴圈的次數會減少一次,找到第二小的數,最後排序完成。
//核心**
設定乙個初始值s,兩個指標i,j分別指向第乙個位置與最後乙個位置,j從後往前找比s小的數,i從前往後找比s大的數,找到之後,i,j數進行交換,繼續,直到ij相遇,將base與i進行交換。自此,左右的數分別比s小或者大,再分別對左右進行排序,可得。//快取元素
integer temp;
for (int i = 0; i < beforenum.length - 1; i++)
}
程式實現:1.找到基準值,2.對基準值進行排序(遞迴呼叫)
選定乙個初始值,將初始值與後面所有數進行比較,找到最小值,交換,在除最小值的數裡面找最小值,放到第二位,以此類推。程式實現思路是遍歷陣列,找到下標最小值,進行資料交換。//快速排序法 ----選定乙個初始值s,2個哨兵i(開始位置)j(結束位置)i從前往後遍歷,j從後往前遍歷(先)
//j找比s小的數,i找比s大的數,交換,如果ij相遇,s與i交換。此時,s左邊的數比s小,s右邊的數比s大
//對左邊與右邊的數分別再進行操作
public static int division(int list, int left, int right)
list[left] = basenum;
return left;
}//快速排序
public static int quicksort(int startnum, int left, int right)
return startnum;
}
堆排序for (int i = 0; i < list.length - 1; i++)
}//資料交換
int temdata = list[tempindex];
list[tempindex] = list[i];
list[i] = temdata;
}
堆排序需要用到二叉樹構建大根堆(父節點比左右孩子都要大),
從根結點3開始,不用交換,左結點2與5交換,交換後再將5與3交換,交換後再將3與4交換,請自行腦補。。。。 每次構建後會對二叉樹進行破壞,所以需要重新構建。
從無序數列中取出乙個數,再取出乙個數,對比插入到有序數列前面或者後面,每次取出乙個數,進行插入。//堆排序
//調整堆方法
public static void heapadjust(int list, int parent, int length)
//最後將temp值賦給較大的子節點,以形成兩值交換
list[parent] = temp;
}//堆排序演算法
public static int heapsort(int list)
//最後輸出堆元素
for (int i = list.length - 1; i > 0; i--)
return list;
}
//無序序列
ps:由於自身實力的限制,後面幾種排序有的沒有寫例子,感覺不怎麼好理解,只能後面再來研究了。可以檢視我的參考部落格,感覺這個大哥寫的東西很好,推薦。另附上我的**位址(有很多不足還請指教)。
1.2.
3.
演算法之排序演算法
1.概述 排序演算法是計算機技術中最基本的演算法,許多複雜演算法都會用到排序。儘管各種排序演算法都已被封裝成庫函式供程式設計師使用,但了解排序演算法的思想和原理,對於編寫高質量的軟體,顯得非常重要。本文介紹了常見的排序演算法,從演算法思想,複雜度和使用場景等方面做了總結。2.幾個概念 1 排序穩定 ...
演算法之排序演算法
1.概述 排序演算法是計算機技術中最基本的演算法,許多複雜演算法都會用到排序。儘管各種排序演算法都已被封裝成庫函式供程式設計師使用,但了解排序演算法的思想和原理,對於編寫高質量的軟體,顯得非常重要。本文介紹了常見的排序演算法,從演算法思想,複雜度和使用場景等方面做了總結。2.幾個概念 1 排序穩定 ...
演算法之排序演算法
1.概述 排序演算法是計算機技術中最基本的演算法,許多複雜演算法都會用到排序。儘管各種排序演算法都已被封裝成庫函式供程式設計師使用,但了解排序演算法的思想和原理,對於編寫高質量的軟體,顯得非常重要。本文介紹了常見的排序演算法,從演算法思想,複雜度和使用場景等方面做了總結。2.幾個概念 1 排序穩定 ...