`

实例052 - 使用直接插入排序

 
阅读更多

心法领悟052:如何评价排序算法的好坏。

评价排序算法好坏的标准主要有两条,分别为:

  1. 所需的时间和所需的辅助空间
  2. 算法本身的复杂程度
    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    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.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.border.EmptyBorder;
    import javax.swing.UIManager;
    import javax.swing.JTextField;
    
    public class QuickSort 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 {
                        QuickSort frame = new QuickSort();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        
        /**
         * Create the frame.
         */
        public QuickSort() {
            setTitle("\u4F7F\u7528\u5FEB\u901F\u6392\u5E8F\u6CD5");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 450, 300);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            GridBagLayout gbl_contentPane = new GridBagLayout();
            gbl_contentPane.columnWidths = new int[] { 0, 0 };
            gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0 };
            gbl_contentPane.columnWeights = new double[] { 1.0, Double.MIN_VALUE };
            gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, 1.0, 0.0,
                    Double.MIN_VALUE };
            contentPane.setLayout(gbl_contentPane);
            
            JButton button = new JButton("\u751F\u6210\u968F\u673A\u6570");
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    do_button_actionPerformed(e);
                }
            });
            
            textField = new JTextField();
            GridBagConstraints gbc_textField = new GridBagConstraints();
            gbc_textField.fill = GridBagConstraints.HORIZONTAL;
            gbc_textField.insets = new Insets(0, 0, 5, 0);
            gbc_textField.gridx = 0;
            gbc_textField.gridy = 0;
            contentPane.add(textField, gbc_textField);
            GridBagConstraints gbc_button = new GridBagConstraints();
            gbc_button.insets = new Insets(0, 0, 5, 0);
            gbc_button.gridx = 0;
            gbc_button.gridy = 1;
            contentPane.add(button, gbc_button);
            
            JScrollPane scrollPane_1 = new JScrollPane();
            GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
            gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0);
            gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
            gbc_scrollPane_1.gridx = 0;
            gbc_scrollPane_1.gridy = 2;
            contentPane.add(scrollPane_1, gbc_scrollPane_1);
            
            textArea2 = new JTextArea();
            scrollPane_1.setViewportView(textArea2);
            
            JButton button_1 = new JButton("\u5FEB\u901F\u6392\u5E8F\u6CD5");
            button_1.setActionCommand("\u5FEB\u901F\u6392\u5E8F\u6CD5");
            button_1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    do_button_1_actionPerformed(e);
                }
            });
            GridBagConstraints gbc_button_1 = new GridBagConstraints();
            gbc_button_1.gridx = 0;
            gbc_button_1.gridy = 3;
            contentPane.add(button_1, gbc_button_1);
        }
        
        private int[] array = new int[10];
        private JTextField textField;
        private JTextArea textArea2;
        
        protected void do_button_actionPerformed(ActionEvent e) {
            Random random = new Random();// 创建随机数对象
            String text = "";
            for (int i = 0; i < array.length; i++) {// 初始化数组元素
                array[i] = random.nextInt(90);// 生成50以内的随机数
                text += (array[i] + "  ");// 把数组元素显示的文本域控件中
            }
            textField.setText(text);
        }
        
        protected void do_button_1_actionPerformed(ActionEvent e) {
            textArea2.setText("");// 清空文本域
            quickSort(array, 0, array.length - 1);// 调用快速排序算法
        }
        
        private void quickSort(int sortarray[], int lowIndex, int highIndex) {
            int lo = lowIndex;// 记录最小索引
            int hi = highIndex;// 记录最大索引
            int mid;// 记录分界点元素
            if (highIndex > lowIndex) {
                mid = sortarray[(lowIndex + highIndex) / 2];// 确定中间分界点元素值
                while (lo <= hi) {
                    while ((lo < highIndex) && (sortarray[lo] < mid))
                        ++lo;// 确定不大于分界元素值的最小索引
                    while ((hi > lowIndex) && (sortarray[hi] > mid))
                        --hi;// 确定大于分界元素值的最大索引
                    if (lo <= hi) {// 如果最小与最大索引没有重叠
                        swap(sortarray, lo, hi);// 交换两个索引的元素
                        ++lo;// 递增最小索引
                        --hi;// 递减最大索引
                    }
                }
                if (lowIndex < hi)// 递归排序没有未分解元素
                    quickSort(sortarray, lowIndex, hi);
                if (lo < highIndex)// 递归排序没有未分解元素
                    quickSort(sortarray, lo, highIndex);
            }
        }
        
        private void swap(int swapArray[], int i, int j) {
            int temp = swapArray[i];// 交换数组元素
            swapArray[i] = swapArray[j];
            swapArray[j] = temp;
            for (int k = 0; k < array.length; k++) {// 把数组元素显示到文本域
                textArea2.append(array[k] + "  ");
            }
            textArea2.append("\n");// 追加换行符
        }
        
    }
    
     

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

相关推荐

    冒泡排序、直接插入排序 等java代码

    本文将详细讨论两种常见的简单排序算法:冒泡排序和直接插入排序,它们都是基于比较的内部排序算法,并且在Java语言中实现。 **冒泡排序(Bubble Sort)** 冒泡排序是一种基础的排序算法,其基本思想是通过重复...

    C语言编程实现10个数据结构课程设计实例-二叉树建立遍历冒泡排序快速排序等.zip

    直接插入排序.c 直接选择排序.c 10个数据结构课程设计例子 查找.c 二叉排序树.c 二叉树层次遍历.c 二叉树非递归遍历.c 二叉树建立.c 快速排序.c 括号匹配.c 冒泡排序.c 直接插入排序.c 直接选择排序.c 10个数据结构...

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

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

    折半插入排序

    - **空间复杂度**:折半插入排序是原地排序算法,不使用额外的数据结构,因此空间复杂度为O(1)。 #### 七、应用场景 折半插入排序适用于小规模数据集或部分已排序的数据。在这些场景下,通过减少比较次数可以显著...

    插入排序算法C语言程序.zip

    本项目提供的“插入排序算法C语言程序”是一个实现这一算法的实例,有助于理解插入排序的工作原理。 1. 插入排序算法概念: 插入排序的核心在于每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列...

    直接插入排序

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

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

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

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

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

    Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例

    本文实例讲述了Python实现的...#直接插入排序 def insert_sort(list): for i in range(len(list)): Key = list [i] #待插入元素 j = i - 1 while(Key &lt; list&gt;= 0): list[j+1] = list[j] #后移元素 list[j] = Key

    简单排序算法--类的简单使用

    4. **类的实例化与对象的使用**:在主程序中,我们可能需要创建`SortAlgorithms`和`UserInterface`的实例,通过调用类的方法来执行排序算法或控制界面。 5. **成员函数的访问控制**:根据需求,可以使用`public`、`...

    js代码-直接插入排序-2

    总结起来,"js代码-直接插入排序-2"项目提供了使用JavaScript实现直接插入排序的实例,通过分析`main.js`文件中的代码,我们可以学习到如何在JavaScript环境中编写和应用这种排序算法。同时,`README.txt`文件可以...

    数据结构:11 第9章 排序new.ppt

    - **插入排序**:如直接插入排序、折半插入排序、2-路插入排序等,基本思路是将元素逐个插入到已排序的序列中。 - **交换排序**:如冒泡排序和快速排序,通过交换元素位置来实现排序。 - **选择排序**:如简单...

    面试必考题目 各种排序实例及点评

    本文总结了各种排序实例,包括直接插入排序、shell 排序、选择排序、冒泡排序、快速排序、归并排序等,并对每种排序算法的特点、优缺点和应用场景进行了分析。 1. 排序算法的分类 根据平均时间复杂度,可以将排序...

    VC++-----二叉排序树

    8. **优化策略**:在实际应用中,可以通过优化策略提高二叉排序树的性能,例如使用自平衡的二叉排序树,或者在插入新节点时调整树结构以保持较好的平衡状态。 在VC++环境中实现二叉排序树,可以使用C++的数据结构和...

    MoreWindows白话经典算法之七大排序第2版(高清)

    本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...

    10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.zip

    - **直接插入排序.c**:直接插入排序是将元素逐个插入已排序部分的排序方法,适用于小规模或部分有序的数据,时间复杂度同样为O(n^2)。 - **直接选择排序.c**:直接选择排序每次找出未排序部分的最小元素并放到已...

    java直接插入排序示例

    标题中的"java直接插入排序示例"是指使用Java编程语言实现的直接插入排序算法的实例。描述中提到,插入排序虽然在最坏情况下的时间复杂度仍然是O(n²),但通常情况下其效率高于冒泡排序和选择排序。这是因为插入排序...

    C++排序 代码实例

    本文将介绍C++实现的几种排序算法,包括插入排序、希尔排序、冒泡排序、快速排序和选择排序,并探讨友元在类中的使用。 首先,`sample` 类用于存储需要排序的数据,它包含一个整型数组 `A` 和一个整型变量 `n`,...

Global site tag (gtag.js) - Google Analytics