Java中三種常用的排序方法
今天重新學習類三種排序方法,按照排序速度依次是氣泡排序,選擇排序和插入排序。
以下示例皆為從小到大的排序
1.氣泡排序
每一次比較都可能要交換元素。
氣泡排序的思想是:
每一輪開始的時候,將第一個元素(a)開始與其後的元素(b)依次進行比較,將較大的元素(設為m)放到後面,並將m與其後的另外一個元素繼續進行比較,直到最後一個沒有排好序的元素。
在接下來一輪的排序中,剛才以及之前選出來的、已經排好順序的最大值不用參與排序。
依次類推,總共遍歷n-1輪,即可完成排序。
具體程式碼如下:
void bubble(int[] arr){
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("\n--bubble :");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
2.選擇排序
每次比較的時候不交換
選擇排序的思想:
每次比較的時候找到的兩個數中的較大值並記下其位置,等到當前一輪的遍歷完成之後,將最後一個未排序元素與這一輪遍歷找到的最大值交換
最多交換n-1次
程式碼如下:
void select(int[] arr){
for (int i = 0; i < arr.length; i++) {
int maxIndex = 0;
int temp = 0;
for (int j = 1; j < arr.length - i; j++) {
if (arr[maxIndex] < arr[j]) {
maxIndex = j;
}
}
temp = arr[maxIndex];
arr[maxIndex] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
System.out.println("\n--select :");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
3.插入排序法
插入排序法思想:
將待排序的元素分為有序和無序兩種,剛開始排序的時候假設只有第一個元素是有序的,其餘n-1個元素都是無序的;
排序開始的時,將無序部分的一個元素(a)與有序部分的最後一個元素(b)進行比較,如果a<b,則將a與b交換,再將a與下一個有序元素進行比較;否則,將a加到b後面,作為有序部分的最後一個元素。
接著再從無序部分取出一個元素與有序部分的元素依次比較,直達所有元素都為有序元素。
遍歷n-1次
程式碼如下:
void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++) {
int instertValue = arr[i];
for (int j = i - 1; j >= 0; j--) {
if (instertValue < arr[j]) {
arr[j+1] = arr[j];
arr[j] = instertValue;
}else {
break;
}
}
}
/* 第二種表示形式
for (int i = 1; i < arr.length; i++) {
int instertVal = arr[i];
int index = i - 1;
while (index >= 0 && instertVal < arr[index]) {
arr[index + 1] = arr[index];
index--;
}
arr[index + 1] = instertVal;
}
*/
System.out.println("\n--insertSort :");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
相關文章
- 比較Java Swing中三種註冊事件的方法Java事件
- 用 Java 實現的八種常用排序演算法Java排序演算法
- 幾種常用的排序程式碼排序
- 元素水平垂直居中三種方法實現
- 幾種常用的排序演算法排序演算法
- 【演算法】Java實現七種常用排序演算法演算法Java排序
- .NetCore中三種注入方式的思考NetCore
- Go 中的三種排序方法Go排序
- 八種常用排序演算法排序演算法
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- Java集合中的排序方法Java排序
- 簡述幾種常用的排序演算法排序演算法
- 建樹的幾種常用方法
- Java 常用的 4 種加密方式Java加密
- Java 22中三種垃圾回收GC效能獲得了大提升JavaGC
- Redis 中三種特殊的資料型別Redis資料型別
- 如何理解JavaScript中常用的4種排序演算法?JavaScript排序演算法
- 幾種常用的排序演算法之JavaScript實現排序演算法JavaScript
- iframe跨域的幾種常用方法跨域
- Python中幾種lambda排序方法Python排序
- 一遍記住Java常用的八種排序演算法與程式碼實現Java排序演算法
- java字串常用方法Java字串
- 快速排序的三種實現方法 (C++)排序C++
- python實現常用五種排序演算法Python排序演算法
- 常用的Java類方法【轉載】Java
- Java中Object類的常用方法JavaObject
- Java中Scanner類的常用方法Java
- Java中String類的常用方法Java
- Java中StringBuffer類的常用方法Java
- Java工具庫——Hutool的常用方法Java
- Python教程: 反射及常用的幾種方法Python反射
- Linux埠轉發的幾種常用方法Linux
- C#各種加密方法,字典排序C#加密排序
- Java8 常用方法Java
- 【Java筆記】十分鐘搞定常用的八種排序演算法與程式碼實現Java筆記排序演算法
- 【IDL】遠取文字中三維陣列的方法陣列
- Java之Thread類的常用方法 .sleep()Javathread
- Java集合 HashSet的原理及常用方法Java
- Java-String的常用方法總結!Java