南大高级算法作业之非递归合并排序

mac2024-02-23  47

import java.util.*; public class Main { //一次划分排序 public static void merge(int[]element,int left,int mid,int right){ int[] temp = new int[right-left+1]; int l = left; int r = right; int i = mid+1; int k = 0; //将两部分合并 while(l <= mid && r >= i){ if(element[l] < element[i]){ temp[k] = element[l]; l ++; }else{ temp[k] = element[i]; i ++; } k++; } //右半部分先比完 if(l <= mid){ while(l <= mid){ temp[k] = element[l]; l ++; k++; } } //左半部分先比完 if(i <= r){ while(i <= r){ temp[k] = element[i]; i ++; k ++; } } for(int j=0;j < temp.length;j ++){ element[left+j] = temp[j]; } } public static void main (String[] args){ Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int num = scan.nextInt();//元素数 int[] element = new int[num]; //初始化数组 for(int i=0;i < num;i ++){ element[i] = scan.nextInt(); } int len = 1; while (num > len) { for(int i=0;i < num;i += 2*len){ int left = i; int mid = i+len-1; int right = i+2*len-1; //num为奇数时会越界 if(right > num-1){ right = num-1; } if(mid > num-1){ mid = num-1; } merge(element,left,mid,right); } len *=2; } for(int i=0;i < num;i ++){ if(i == num-1){ System.out.print(element[i]); }else{ System.out.print(element[i]+" "); } } System.out.println(); } } }

 

最新回复(0)