import java.io.*;
 import java.awt.*;
 import java.applet.Applet;
 import java.awt.event.*;
import java.util.*; 
/*<applet code =NewApplet.class width = 600 height = 200></applet>*/
public class NewApplet extends Applet implements ActionListener 
{
Button b1 = new Button("排序");
Button b2 = new Button("插入");
Label lab1 = new Label("请输入数据:");
Label lab2 = new Label("排序前的数据:");
Label lab3 = new Label("排序后的数据:");
Label lab4 = new Label("插入后的数据:");
TextField f1 = new TextField(20);
String a;//获取输入到文本框中的字符串
    StringBuffer sa = new StringBuffer();
    StringBuffer sb = new StringBuffer();
StringBuffer sc = new StringBuffer();
String s[];/*以空格分割字符后,s存放分割后的字符串数组*/;
int s3[];//存放字符串数组转换成整型数组

 public void init()    
{
 setLayout(null);     //界面控件布局与加载
 add(lab1);
 lab1.setBounds(10, 10, 100, 20);
 add(f1);
 f1.setBounds(120, 10, 300, 20);
 add(b1);
 b1.setBounds(10, 40, 80, 30);
     add(b2);
 b2.setBounds(100, 40, 80, 30);
     add(lab2);
 lab2.setBounds(10, 80, 500, 20);
 add(lab3);
 lab3.setBounds(10, 120, 500, 20);
 add(lab4);
 lab4.setBounds(10, 160, 500, 20);
 b1.addActionListener(this);
 b2.addActionListener(this);
}
 
public String sort() //数据排序
{
    for (int i = 1; i < s3.length; i++)
 { for (int j = 0; j < s3.length - i; j++)
{
 if (s3[j] > s3[j + 1]) 
 {
 int t ;
 t = s3[j];
 s3[j] = s3[j + 1];
 s3[j + 1] = t;
 } 
}
 }
 for (int i = 0; i < s3.length; i++)
 sa.append(s3[i] + " ");
 return sa.toString();
 }
 
//这个插入方法有问题 
 public String insert()//插入排序
 {f1.setVisible(true);
 int x=Integer.parseInt(f1.getText());
 int i=0;
 
while(i<s3.length)
if(x>=s3[i])
  i++;
    for(int j=s3.length;j>=i;j--)
  s3[j]=s3[j-1];
  s3[i]=x;
for (int k=0;k<s3.length;k++)
 sc.append(s3[k] + " ");
    return sc.toString();
   
}
 
 
public String PrintNum()
{  for (int i = 0; i < s.length; i++)
 sb.append(s[i] + " ");
 return sb.toString();
 }
 
public void actionPerformed(ActionEvent e)
{  a = f1.getText();//获取输入到文本框中的字符串
s = a.split(" ");/*以空格分割字符后,s存放分割后的字符串数组*/
s3=new int[s.length];//为整形数组s3分配内存空间
 for(int i =0 ;i<s.length;i++)
s3[i] = Integer.parseInt(s[i]);/*将字符串数组转换成整型数组存放在s3数组中。方便后面的排序*/
if (e.getSource() == b1) //如果选择了排序
 {
 lab2.setText("排序前的数据:" + PrintNum());
 lab3.setText("排序后的数据:" + sort());
 f1.setText("");  }
if (e.getSource() == b2) //如果选择了插入
 {

 lab4.setText("插入后的数据:"+insert());
 }
}

解决方案 »

  1.   

    如果有需要,可以参考下面的插入实现
    import java.util.Arrays;public class Hello {
        /**
         * 在一组有序数中插入一个数
         * @param ns 是一个组有序数
         * @param value 需要插入到有序数中的数
         */
        public static void insert(int[] ns, int value) {
            for (int i = 0; i < ns.length; ++i) {
                if (ns[i] >= value) { // 找到需要插入的位置
                    for (int j = ns.length - 1; j > i; --j) {
                        ns[j] = ns[j - 1];
                    }                ns[i] = value;
                    break;
                }
            }
        }    public static void main(String[] args) {
            int[] ns = {1, 2, 3, 4, 6, 7, 8};
            int value = 5;        System.out.println("Before insert: " + Arrays.toString(ns));
            insert(ns, value);
            System.out.println("After  insert: " + Arrays.toString(ns));
        }
    }
      

  2.   


    package com.zf.test;import java.util.Arrays;public class BinaryInsert { public static void main(String[] args) { BinaryInsert bt = new BinaryInsert(); int[] array = new int[]{1 , 3 , 6 , 8, 30 , 49 , 60 , 70 , 83 , 85}; System.out.println(Arrays.toString(array)); array = bt.insert(array , 50);
    System.out.println(Arrays.toString(array)); } public int[] insert(int[] sortArray , int value){
    int index = findInsertIndex(sortArray , value , 0 , sortArray.length); //找到插入位置
    int[] newArray = new int[sortArray.length + 1];  
    newArray[index] = value ;
    System.arraycopy(sortArray, 0, newArray, 0 , index );
    System.arraycopy(sortArray, index, newArray, index + 1 , sortArray.length - index);
    return newArray ; //返回新数组
    } //找到value适合插入的位置
    public int findInsertIndex(int[] sortArray , int value , int left , int right){
    int middleIndex = (right - left) / 2 + left  ;
    int middleValue = sortArray[middleIndex] ; 
    if(right - left < 2){
    if(value > sortArray[right -1 ])
    return right;
    else if(value > sortArray[left]){
    return left + 1;
    }else{
    return left;
    }
    }else if(middleValue < value){
    return findInsertIndex(sortArray , value , middleIndex + 1 , right);
    }else if(middleValue > value){
    return findInsertIndex(sortArray , value , left , middleIndex );
    }else{
    return middleIndex + 1;
    }
    }}