1. 程式人生 > 其它 >java常見的幾種排序

java常見的幾種排序

package com.wx.wxlogin.util;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class SortUtil {

    private static Integer[] initArray = {34, 45, 1, 5, 67, 8, 10,2};


    // 氣泡排序
    public static void bubbleSort(Integer[] array) {

        for (int i = 0; i < array.length; i++) {
            
for (int j = 0; j < array.length - i - 1; j++) { int pre = array[j]; int next = array[j + 1]; if (pre > next) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } }
// 插入排序 public static void insertSort(Integer[] array) { for (int i = 1; i < array.length; i++) { //預設i=1 為最大值 int maxValue = array[i]; int j = i - 1; for (; j >= 0; j--) { if (array[j] > maxValue) { array[j
+ 1] = array[j]; } else { break; } } array[j + 1] = maxValue; } } // 快排 public static void quickSort(Integer[] array, Integer low, Integer heigh) { if (low > heigh) return; Integer left = low, right = heigh, temp = array[low]; while (right > left) { //以左邊為基準,右邊的先走 while (right > left && array[right] >= temp) { right--; } while (right > left && array[left] <= temp) { left++; } if (right > left) { int a = array[left]; array[left] = array[right]; array[right] = a; } } //和基準調換位置 array[low] = array[right]; array[right] = temp; quickSort(array,low,right - 1); quickSort(array,right + 1, heigh); } /** * 堆排序 * @param array */ public static void heapSort( Integer[] array,int length){ //1. 計算堆中最後一個非葉子結點 int node = length / 2 - 1; for (int i = node; i >=0 ; i--) { headAdJust(array,i,length); } System.out.println(Arrays.toString(array)); } // 調整堆結構 (堆化) public static void headAdJust(Integer[] array,int node,Integer length){ // 節點值 int temp = array[node]; // 左子節點 int leftNode = node * 2 + 1; while (leftNode < length){ // 判斷是否有右子節點,判斷左右子節點大小 if (leftNode + 1 < length && array[leftNode] < array[leftNode + 1]){ leftNode ++; } // 判斷葉子結點值和當前節點大小 if (array[leftNode] > temp){ array[node] = array[leftNode]; // 節點轉換 node = leftNode; array[leftNode] = temp; leftNode = 2 * node + 1; }else { break; } } } public static void main(String[] args) { // insertSort(initArray); // quickSort(initArray,0,initArray.length-1); // Stream.of(initArray).forEach(System.out::println); heapSort(initArray,initArray.length); } }

測試可用!!!!!

-- 氣泡排序 -- 插入排序 -- 快速排序 -- 堆排序