日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java实现归并排序

發布時間:2023/12/9 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现归并排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歸并排序是利用歸并的思想實現的排序方法,該算法采用經典的分治策略

package com.lmh.sort;import java.util.Arrays;public class MergetSort {public static void main(String[] args) {int arr[] = {8, 4, 5, 7, 1, 3, 6, 2};int temp[] = new int[arr.length];//說明歸并排序需要一個額外的空間mergeSort(arr, 0, arr.length - 1, temp);System.out.println(Arrays.toString(arr));}//分+合的方法public static void mergeSort(int[] arr, int left, int right, int[] temp) {if (left < right) {int mid = (left + right) / 2;//中間索引//向左遞歸進行分解mergeSort(arr, left, mid, temp);//向右遞歸進行分解mergeSort(arr, mid + 1, right, temp);//每分解一次就合并一次merge(arr, left, mid, right, temp);}}//合并的方法/*** @param arr 排序的原始數組* @param left 左邊有序序列的初始索引* @param mid 中間索引* @param right 右邊索引* @param temp 做中轉的數組*/public static void merge(int[] arr, int left, int mid, int right, int[] temp) {int i = left;//初始化i,左邊有序序列的初始索引int j = mid + 1;//初始化j,右邊有序序列的初始索引int t = 0;//初始化指向temp的當前索引//先把左右兩邊(已經有序)的數據按照規則填充到temp數組//直到左右兩邊的有序序列,有一邊處理完為止while (i <= mid && j <= right) {//繼續//如果左邊的有序序列的當前元素,小于等于右邊有序序列的當前元素//既將左邊的當前元素,填充到temp數組//然后t++,i++if (arr[i] <= arr[j]) {temp[t] = arr[i];t += 1;i += 1;} else {//反之,將右邊有序序列的當前元素,填充到temp數組temp[t] = arr[j];t += 1;j += 1;}}//把有剩余數據的一邊的數據依次全部填充到tempwhile (i <= mid) {//左邊的有序序列還有剩余的元素,就全部填充到temptemp[t] = arr[i];t += 1;i += 1;}while (j <= right) {//右邊的有序序列還有剩余的元素,就全部填充到temptemp[t] = arr[j];t += 1;j += 1;}//將temp數組的元素拷貝到arr//并不是每次都拷貝所有數據t = 0;int templeft = left;while (templeft <= right) {//第一次合并時,tempLeft = 0,right = 1;arr[templeft] = temp[t];t += 1;templeft += 1;}} }

總結

以上是生活随笔為你收集整理的java实现归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。