归并排序java
package mergesort;import java.util.Arrays;public class MergeSort {public static void mergesort(int[] data,int start,int end){//左閉右開固定寫法/** 如果寫成這樣:mergesort(data,mid,end)* 這樣將導致遞歸后start的值發生變化,引發錯誤!* */if(start+1 == end){return;}int mid = (start+end)/2;//取中值mergesort(data,start,mid);//將數組分拆分為兩部分mergesort(data,mid,end);int i = start;int j = mid;int k = 0;int[] temp = new int[end-start];//創建臨時數組//將data數組賦值給臨時數組temp排序while (i<mid && j<end){if(data[i]<=data[j]){temp[k++] = data[i++];}else{temp[k++] = data[j++];}}//處理當一側數組已經賦值完畢但另一次沒復制完畢情況;if(i< mid){while(i<mid){temp[k++] = data[i++];}}else {while(j<end){temp[k++] = data[j++];}}//將有序的temp數組賦值給data數組for(int l =0;l<end-start;l++){data[start+l]=temp[l];}System.out.println(Arrays.toString(data));}public static void main(String[] args) {int[] data = new int[]{2,5,4,9,7,4,5,1,3};System.out.print("排序前:");System.out.println(Arrays.toString(data));mergesort(data,0,data.length);System.out.print("排序后:");System.out.println(Arrays.toString(data));}
}
推薦歸并排序視頻
總結
- 上一篇: Qt:#pragma comment(l
- 下一篇: c语言智能小车项目的感想,智能小车毕业论