Java數(shù)組常用排序算法實(shí)例小結(jié)
本文實(shí)例講述了Java數(shù)組常用排序算法。分享給大家供大家參考,具體如下:
1、冒泡排序法
SortArray_01.java
public class SortArray_01 {
public static void main(String args[]) {
int[] array = { 14, 5, 86, 4, 12, 3, 21, 13, 11, 2, 55, 66, 22 };
// 創(chuàng)建一個(gè)初始化的一維數(shù)組array
System.out.println("未排序的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 遍歷array數(shù)組中的元素
System.out.print(" " + array[i]);
// 輸出數(shù)組元素
if ((i + 1) % 5 == 0)
// 每5個(gè)元素一行
System.out.println();
}
int mid; // 定義一個(gè)中間變量,起到臨時(shí)存儲(chǔ)數(shù)據(jù)的作用
for (int i = 0; i < array.length; i++) {
// 執(zhí)行冒泡排序法
for (int j = i; j < array.length; j++) {
if (array[j] < array[i]) {
mid = array[i];
array[i] = array[j];
array[j] = mid;
}
}
}
System.out.println("\n使用冒泡法排序后的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 遍歷排好序的array數(shù)組中的元素
System.out.print(" " + array[i]);
// 輸出數(shù)組元素
if ((i + 1) % 5 == 0)
System.out.println();
// 每5個(gè)元素一行
}
}
}
運(yùn)行結(jié)果:
未排序的數(shù)組: 14 5 86 4 12 3 21 13 11 2 55 66 22 使用冒泡法排序后的數(shù)組: 2 3 4 5 11 12 13 14 21 22 55 66 86
2、數(shù)組遞增排序
SortArray_02.java
import java.util.Arrays;
import java.util.Random;
public class SortArray_02 {
public static void main(String[] args) {
Random rd = new Random();
int[] array = new int[15];
// 聲明數(shù)組
System.out.println("沒有使用sort方法前的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 利用隨機(jī)數(shù)隨意產(chǎn)生15個(gè)0~20之間的隨機(jī)數(shù)
array[i] = rd.nextInt(20);
// 給array數(shù)組賦值
System.out.print(" " + array[i]);
if ((i + 1) % 5 == 0)
System.out.println();
}
Arrays.sort(array);
// 對(duì)array數(shù)組進(jìn)行升序排序
System.out.println("\n使用sort方法后的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 將array數(shù)組中的數(shù)據(jù)輸出
System.out.print(" " + array[i]);
if ((i + 1) % 5 == 0)
System.out.println();
}
}
}
運(yùn)行結(jié)果:
沒有使用sort方法前的數(shù)組: 13 12 11 18 11 11 17 13 11 8 1 0 9 18 3 使用sort方法后的數(shù)組: 0 1 3 8 9 11 11 11 11 12 13 13 17 18 18
3、快速排序法
SortArray_03.java
public class SortArray_03 {
public static void main(String args[]) {
int[] intArray = { 12, 11, 45, 6, 8, 43, 40, 57, 3, 20, 15, 88, 23 };
System.out.println("排序前的數(shù)組:");
for (int i = 0; i < intArray.length; i++) {
System.out.print(" " + intArray[i]);
// 輸出數(shù)組元素
if ((i + 1) % 5 == 0)
// 每5個(gè)元素一行
System.out.println();
}
System.out.println();
int[] b = quickSort(intArray, 0, intArray.length - 1);
// 調(diào)用quickSort
System.out.println("使用快迅排序法后的數(shù)組:");
for (int i = 0; i < b.length; i++) {
System.out.print(" " + b[i]);
if ((i + 1) % 5 == 0)
// 每5個(gè)元素一行
System.out.println();
}
}
public static int getMiddle(int[] array, int left, int right) {
int temp;
// 進(jìn)行一趟快速排序,返回中心點(diǎn)位置
int mid = array[left];
// 把中心置于a[0]
while (left < right) {
while (left < right && array[right] >= mid)
right--;
temp = array[right];
// 將比中心點(diǎn)小的數(shù)據(jù)移動(dòng)到左邊
array[right] = array[left];
array[left] = temp;
while (left < right && array[left] <= mid)
left++;
temp = array[right];
// 將比中心點(diǎn)大的數(shù)據(jù)移動(dòng)到右邊
array[right] = array[left];
array[left] = temp;
}
array[left] = mid;
// 中心移到正確位置
return left; // 返回中心點(diǎn)
}
public static int[] quickSort(int[] array, int left, int right) {// 快速排序法
if (left < right - 1) {
// 如果開始點(diǎn)和結(jié)點(diǎn)沒有重疊的時(shí)候,也就是指針沒有執(zhí)行到結(jié)尾
int mid = getMiddle(array, left, right);
// 重新獲取中間點(diǎn)
quickSort(array, left, mid - 1);
quickSort(array, mid + 1, right);
}
return array;
}
}
運(yùn)行結(jié)果:
排序前的數(shù)組: 12 11 45 6 8 43 40 57 3 20 15 88 23 使用快迅排序法后的數(shù)組: 3 6 8 11 12 20 15 23 40 43 45 88 57
4、選擇排序法
SortArray_04.java
public class SortArray_04 {
public static void main(String args[]) {
int[] array = { 14, 5, 86, 4, 12, 3, 51, 13, 11, 2, 32, 6, 45, 34 };
// 創(chuàng)建一個(gè)初始化的一維數(shù)組array
int keyValue; // 表示最小的元素值
int index; // 表示最小的元素值的下標(biāo)
int temp; // 中間變量
System.out.println("未排序的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 遍歷array數(shù)組中的元素
System.out.print(" " + array[i]);
// 輸出數(shù)組元素
if ((i + 1) % 5 == 0)
// 每5個(gè)元素一行
System.out.println();
}
for (int i = 0; i < array.length; i++) {
// 使用選擇排序法的核心
index = i;
keyValue = array[i];
for (int j = i; j < array.length; j++)
if (array[j] < keyValue) {
index = j;
keyValue = array[j];
}
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
System.out.println("\n使用選擇排序法后的數(shù)組:");
for (int i = 0; i < array.length; i++) {
// 遍歷排好序的array數(shù)組中的元素
System.out.print(" " + array[i]);
// 輸出數(shù)組元素
if ((i + 1) % 5 == 0)
System.out.println();
// 每5個(gè)元素一行
}
}
}
運(yùn)行結(jié)果:
未排序的數(shù)組: 14 5 86 4 12 3 51 13 11 2 32 6 45 34 使用選擇排序法后的數(shù)組: 2 3 4 5 6 11 12 13 14 32 34 45 51 86
PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:
在線動(dòng)畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java中ArrayList與順序表的概念與使用實(shí)例
順序表是指用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)各個(gè)元素,使得在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲(chǔ)在相鄰的物理存儲(chǔ)單元中的線性表,下面這篇文章主要介紹了Java?ArrayList與順序表的相關(guān)資料,需要的朋友可以參考下2022-01-01
Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
這篇文章主要介紹了Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
MybatisPlus查詢數(shù)據(jù)日期格式化問題解決方法
MyBatisPlus是MyBatis的增強(qiáng)工具,支持常規(guī)的CRUD操作以及復(fù)雜的聯(lián)表查詢等功能,這篇文章主要給大家介紹了關(guān)于MybatisPlus查詢數(shù)據(jù)日期格式化問題的解決方法,需要的朋友可以參考下2023-10-10
Java Hibernate中的持久化類和實(shí)體類關(guān)系
Hibernate是一種Java對(duì)象關(guān)系映射框架,通過持久化類將Java對(duì)象映射到數(shù)據(jù)庫表中。持久化類需要實(shí)現(xiàn)無參構(gòu)造器、具有標(biāo)識(shí)屬性和使用注解或XML進(jìn)行映射。Hibernate通過Session來管理對(duì)象的狀態(tài),包括臨時(shí)狀態(tài)、持久化狀態(tài)和游離狀態(tài)2023-04-04
springboot?集成activemq項(xiàng)目配置方法
這篇文章主要介紹了springboot?集成activemq項(xiàng)目配置方法,e-car項(xiàng)目配置通過引入activemq依賴,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04

