`

实例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++经典学习实例1 .

    这个实例可能讲解了如何有效地使用Vector解决实际问题,包括它的推回(push_back)、插入(insert)和迭代器的使用。 8. **实例48 - 八皇后和骑士遍历**:这是一个经典的算法问题,涉及棋盘上的棋子放置,以避免...

    几种排序法(直接选择、直接插入、快速、堆、希尔)比较

    在给定的代码片段中,我们可以看到作者尝试使用C++实现了直接插入排序(`InsertSort`)、冒泡排序(`Bubble`)、直接选择排序(`SSort`)和快速排序(`Qsort`)的部分代码。通过`Element`类的实例化,作者记录了每种...

    C++大学教程

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

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

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

    直接插入排序

    直接插入排序是一种简单直观的排序算法,它...以上就是关于直接插入排序的详细解析,结合提供的文档“直接插入排序法.doc”,可以更深入地了解其理论知识和实例应用。通过学习和实践,可以更好地掌握这一基础排序算法。

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

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

    Java算法实例-双向链表操作

    在编程领域,数据结构与算法是基础且至关重要的部分,它们直接影响到程序的效率和设计。本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于...

    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) 客户向服务器发送请求, 每个请求的长度不定. 请求...

    模块一土方工程量的计算方格网法PPT课件.pptx

    2. 求出每个角点的原地形标高:使用插入法,求出每个角点的原地形标高。 3. 求平整标高:使用平均值法或数学分析法,求出平整标高。 4. 确定 H0 的位置:根据平整标高和设计标高,确定 H0 的位置。 5. 求施工标高:...

Global site tag (gtag.js) - Google Analytics