`

实例053 - 使用直接插入法

 
阅读更多

InsertSort算法

插入排序 是将一个记录插入到有序数列中,使得到的新数列仍然有序。插入排序算法的思路是,将n个有序数存放在数组a中,要插入的数为x,首先确定x插在数组中的位置p,数组中p之后的元素都向后移一个位置,空出a(p),将x放入a(p)。这样既可实现插入后数列仍然有序。

下面的算法把 查找插入位置 和 后移数组元素 合并在一起实现,提高了效率。

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.UIManager;

public class InsertSort extends JFrame {
    
    private JPanel contentPane;
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    InsertSort frame = new InsertSort();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public InsertSort() {
        setTitle("\u4F7F\u7528\u76F4\u63A5\u63D2\u5165\u6CD5");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 335, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        textArea1 = new JTextArea();
        textArea1.setBounds(6, 6, 86, 250);
        contentPane.add(textArea1);
        
        JButton button = new JButton("\u968F\u673A\u751F\u6210\u6570\u7EC4");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        button.setBounds(104, 49, 114, 30);
        contentPane.add(button);
        
        JButton button_1 = new JButton("\u63D2\u5165\u6392\u5E8F\u6CD5");
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_1_actionPerformed(e);
            }
        });
        button_1.setBounds(104, 161, 114, 30);
        contentPane.add(button_1);
        
        textArea2 = new JTextArea();
        textArea2.setBounds(230, 6, 86, 250);
        contentPane.add(textArea2);
    }
    
    private int[] array = new int[10];
    private JTextArea textArea1;
    private JTextArea textArea2;
    
protected void do_button_actionPerformed(ActionEvent e) {
    Random random = new Random();// 创建随机数对象
    textArea1.setText("");
    for (int i = 0; i < array.length; i++) {// 初始化数组元素
        array[i] = random.nextInt(90);// 生成50以内的随机数
        textArea1.append(array[i] + "\n");// 把数组元素显示的文本域控件中
    }
}
    
protected void do_button_1_actionPerformed(ActionEvent e) {
    int tmp;// 定义临时变量
    int j;
    for (int i = 1; i < array.length; i++) {
        tmp = array[i];// 保存临时变量
        for (j = i - 1; j >= 0 && array[j] > tmp; j--) {
            array[j + 1] = array[j];// 数组元素交换
        }
        array[j + 1] = tmp;// 在排序位置插入数据
    }
    textArea2.setText("");
    for (int i = 0; i < array.length; i++) {// 初始化数组元素
        textArea2.append(array[i] + "\n");// 把数组元素显示的文本域控件中
    }
}
}

 

 

  • 大小: 8.9 KB
分享到:
评论

相关推荐

    VB基于插入法排序的例子源码.rar

    VB基于插入法排序例子的开源源码,插入法排序后,最后输入各数组数据。插入元素后,其余数组元素后移,然后将数据x插入数组指定位置,学习好本例子,有助于你了解VB中的动态数组、静态数组、键盘事件等实用技巧。...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序法对一维数组进行排序 122 实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素的顺序 125 4.3 常用集合的使用 126 实例106 向...

    C++大学教程

    2.15 for结构使用举例--------------------------------------------------65 2.16 switch多项选择结构-----------------------------------------------68 2.17 do/while重复结构----------------------------...

    直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现

    直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题

    Java经典编程源码基础例程300.zip

    实例040 使用直接插入法对数组排序 59 实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例053 使用直接插入法 65 实例054 使用sort方法对数组进行排序 67 实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名 69 实例057 用List集合传递学生信息 70 实例058 用...

    vc++ 开发实例源码包

    演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求...

    c语言经典案例

    实例201 使用头插入法建立单链表 289 实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 单链表节点逆置 298 实例207 应用栈实现进制转换 300 ...

    C程序范例宝典(基础代码详解)

    实例098 头插入法建立单链表 132 3.3 栈和队列 133 实例099 应用栈实现进制转换 133 实例100 用栈设置密码 135 实例101 栈实现行编辑程序 138 实例102 括号匹配检测 141 实例103 用栈及递归计算多项式...

    入门学习Linux常用必会60个命令实例详解doc/txt

    有些用户会使用直接断掉电源的方式来关闭Linux系统,这是十分危险的。因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件...

Global site tag (gtag.js) - Google Analytics