/*
2017年3月8日16:40:36
java基础50道经典练习题 例30
Athor: ZJY
Purpose:
【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,
插入后此元素之后的数,依次后移一个位置。
*/
import java.util.Scanner;
public class ProgramNo30_1
{
public static void main(String[] args)
{
int[] array = {14, 18, 23, 8, 421, 42, 89, 9, 88, 36};
int[] array1 = sort(array);
print(array1);
System.out.print("请输入要插入的数:");
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
sc.close();
int[] array2 = insert(array1, number);
print(array2);
}
//排序
private static int[] sort(int[] array) {
for (int i=0; i<array.length; i++) {
for (int j=0; j<array.length-i-1; j++) {
if(array[j] > array[j+1]) {
array[j] = array[j]+array[j+1];
array[j+1] = array[j]-array[j+1];
array[j] = array[j]-array[j+1];
}
}
}
return array;
}
//打印
private static void print(int[] array) {
for (int i=0; i<array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}
//方式二:
private static int[] insert(int[] array, int number) {
int[] arraybuf = new int[array.length+1];
for (int i=0; i<array.length; i++) {
arraybuf[i] = array[i];
}
arraybuf[arraybuf.length-1] = number;
arraybuf = sort(arraybuf);
return arraybuf;
}
/* //方式一:
private static int[] insert(int[] array, int number) {
int[] arraybuf = new int[array.length+1];
for (int i=0; i<array.length; i++) {
arraybuf[i] = array[i];
}
arraybuf[arraybuf.length-1] = -1;
//arraybuf[array.length] = -1; //error 抛出数组越界异常 array.length不能作为数组下标
if(number >= array[array.length-1]) {
arraybuf[array.length] = number;
}else {
int i = 0;
for (i=0; i<arraybuf.length; i++) {
if(number < arraybuf[i])
break;
}
for (int j=arraybuf.length-1; j>=i; j--) {
arraybuf[j] = arraybuf[j-1];
if(j == i)
arraybuf[j] = number;
}
}
return arraybuf;
}*/
}
/*
2017年3月8日16:40:36
java基础50道经典练习题 例30
Athor: ZJY
Purpose:
*/
import java.util.Scanner;
public class ProgramNo30_2
{
public static void main(String[] args)
{
int[] A = new int[]{0, 8, 7, 5, 9, 1, 2, 4, 3, 12};
int[] B = sort(A);
print(B);
System.out.println();
System.out.print("请输入要插入的数: ");
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
scan.close();
int[] C = insert(a, B);
print(C);
}
//选择排序
private static int[] sort(int[] A) {
int[] B = new int[A.length];
for(int i=0; i<A.length-1; i++){
int min = A[i];
for(int j=i+1; j<A.length; j++){
if(min > A[j]){
int temp = min;
min = A[j];
A[j] = temp;
}
B[i] = min;
}
}
B[A.length-1] = A[A.length-1];
return B;
}
//打印
private static void print(int[] A) {
for(int i=0; i<A.length; i++)
System.out.print(A[i]+" ");
}
//插入数字
private static int[] insert(int a,int[] A) {
int[] B = new int[A.length+1];
for(int i=A.length-1; i>0; i--)
if(a > A[i]){
B[i+1] = a;
for(int j=0; j<=i; j++)
B[j] = A[j];
for(int k=i+2; k<B.length; k++)
B[k] = A[k-1];
break;
}
return B;
}
}