1. 程式人生 > >有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。

有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。

首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況,插入後此元素之後的數,依次後移一個位置。

import java.util.Scanner;
public class test30{
	public static void main(String[] args){
		int[] a={5,6,8,2,1,13,15,77,88,37,31,58};  //定義一個整型陣列
		System.out.print("排序前:");
		for(int x:a){                              //輸出排序前陣列
			System.out.print(x+"  ");
		}
		System.out.println();
		
		int[] b=sort(a);  //執行排序
		System.out.print("排序後:");
		for(int x:b){     //列印排序後陣列
			System.out.print(x+"  ");
		}
		System.out.println();
		
		System.out.print("請輸入要插入的數:");
		Scanner scan = new Scanner(System.in);		
        int input = scan.nextInt();
        scan.close();
		int[] c=insert(input,b);//向陣列中插入數字
		System.out.print("插入數字後:");
		for(int x:c){           //列印插入後的陣列
			System.out.print(x+"  ");
		}
	}
	private static int[] sort(int[] a){
		//升序  氣泡排序
		for(int j=0;j<a.length-1;j++){
				for(int i=0;i<a.length-1;i++){
					if(a[i]>a[i+1]){
						int temp=a[i];
						a[i]=a[i+1];
						a[i+1]=temp;
					}
				}
		}
		return a;
	} 
	
	private static int[] insert(int n,int[] b){
		int[] tempArray=new int[b.length+1];//定義陣列存放插入後的陣列。
		if(n>b[b.length-1]){//n大於排序好的陣列最後一位,直接把n放到tempArray最後一位。
			tempArray[b.length]=n;
			for(int i=0;i<b.length;i++){
				tempArray[i]=b[i];  //之前的數字按順序賦值。
			}
			
		}else{
			for(int i=0;i<b.length;i++){
				if(n<b[i]){ //找到原來陣列中大於n的第一位,並將n放在此位置
					//給之前沒變的陣列賦值
					for(int j=0;j<i;j++){
						tempArray[j]=b[j];
					}
					
					//後面向後挪一位
					for(int k=i;k<b.length;k++){
						tempArray[k+1]=b[k];
					}
					tempArray[i]=n;
					
					break;
				}
			}
		}
		return tempArray;
	} 
}

在這裡插入圖片描述