`

实例050 - 使用选择排序法

 
阅读更多

心法领悟050:如果数组有重复值,应该使用选择排序(selection sort)。

选择排序法从数组中挑选最大值并放在数组最后,而遇到重复的相等值不会做任何处理,所以如果程序允许数组有重复值的情况,建议使用 选择排序法, 因为它的数据交换次数较少,相对速度也会略微提升,这取决于数组中重复值的数量。

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JScrollPane;
import java.awt.GridBagConstraints;
import javax.swing.JButton;
import java.awt.Insets;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;

public class SelectSort extends JFrame {
    
    private JPanel contentPane;
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    SelectSort frame = new SelectSort();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public SelectSort() {
        setTitle("\u9009\u62E9\u6392\u5E8F\u7B97\u6CD5\u3011");
        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[] { 1.0, 0.0, 1.0, 0.0,
                Double.MIN_VALUE };
        contentPane.setLayout(gbl_contentPane);
        
        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.insets = new Insets(0, 0, 5, 0);
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 0;
        contentPane.add(scrollPane, gbc_scrollPane);
        
        textArea1 = new JTextArea();
        scrollPane.setViewportView(textArea1);
        
        JButton button = new JButton("\u751F\u6210\u968F\u673A\u6570");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        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("\u9009\u62E9\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 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(50);// 生成50以内的随机数
            textArea1.append(array[i]+"  ");// 把数组元素显示的文本域控件中
        }
    }
    
    protected void do_button_1_actionPerformed(ActionEvent e) {
        textArea2.setText("");// 清空文本域
        int index;
        for (int i = 1; i < array.length; i++) {
            index = 0;
            for (int j = 1; j <= array.length - i; j++) {
                if (array[j] > array[index]) {
                    index = j;// 查找最大值
                }
            }
            // 交换在位置array.length-i和index(最大值)两个数
            int temp = array[array.length - i];
            array[array.length - i] = array[index];
            array[index] = temp;
        }
        for (int i = 0; i < array.length; i++) {
            textArea2.append(array[i] + "  ");// 把排序后的数组元素显示到文本域中
        }
    }
}

 

 

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

相关推荐

    Excel-VBA宏编程实例源代码-使用Merge排序阵列.zip

    "使用Merge排序阵列.xlsm"文件包含了具体的VBA代码实现,它展示了如何在Excel环境中用VBA编写Merge排序算法。源代码可能包括以下几个部分: - 分割数组的函数:将数组分成两个子数组。 - 排序函数:递归调用自身,...

    C/C++ 学习实例 - 数据结构/算法 - 排序算法的代码实例

    排序算法的代码实例可以帮助我们更好地理解和掌握各种排序算法的原理、性能特点以及适用场景。 首先,让我们从`vector`容器谈起。`vector`是C++标准模板库(STL)中的一种动态数组,它允许在任意位置插入和删除元素,...

    Excel-VBA宏编程实例源代码-使用Bubble排序阵列.zip

    本实例中的“使用Bubble排序阵列”是一个典型的VBA宏编程应用,它涉及到了数组处理和排序算法的知识。Bubble排序是一种简单的排序算法,通过不断交换相邻的不正确顺序元素来达到排序的目的。 在Excel VBA中,我们...

    C语言编译之数组排序--选择排序

    本文档详细介绍了一个使用C语言实现的选择排序算法示例。选择排序是一种简单直观的比较排序算法,它的工作原理是遍历待排序的数据元素,依次找到最小(或最大)的元素,放到序列的起始位置,直到全部待排序的数据...

    C#下多线程实现实例----一个图形化的排序算法演示程序.pdf

    总结来说,这个C#下多线程实现实例的图形化排序算法演示程序,涵盖了C#多线程编程、图形用户界面设计、排序算法以及事件处理机制等多方面的知识点,为学习和掌握.NET平台下的多线程应用开发提供了一个很好的范例。

    基于Java的实例源码-近百种算法大全打包.zip

    1. 排序算法: - 冒泡排序:通过不断交换相邻的错误顺序元素来逐步排序数组。 - 选择排序:每次找到未排序部分的最小(或最大)元素,放置到正确的位置。 - 插入排序:将每个元素插入到已排序部分的正确位置。 -...

    数据结构实验报告--链式基数排序算法.doc

    链式基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。在描述中提到的实验报告中,主要目标是实现一个链式基数排序算法,用于对一组数据进行最低位优先的排序...

    几种常见排序算法实例

    本文将详细解析标题中提及的五种排序算法:位与、选择、冒泡、插入以及qsort,并结合在VC6.0环境下进行编译实践的情况。 1. **位与排序**: 位与操作符(`&`)在某些特定场景下可用于排序,例如在整数数组中,通过...

    java--JTable排序实例源码

    排序可以使用Java的`Collections.sort()`方法,如果你的数据存储在`List`或`ArrayList`中,或者自定义排序算法,如果数据存储在其他数据结构中。 3. **`TableModel`更新**:完成排序后,必须更新`TableModel`以反映...

    通过实例解析JavaScript常用排序算法

    本文将深入探讨四种常见的排序算法:冒泡排序、快速排序、选择排序以及插入排序,并通过实例代码进行详细解析。 1. **冒泡排序**: 冒泡排序是最直观的排序算法之一,它通过重复遍历待排序的列表,比较每对相邻...

    PHP经典实例--数组

    在IT领域,尤其是在Web开发中,PHP是一种广泛使用的服务器端脚本语言,...无论是处理用户输入、存储数据、还是在复杂的算法中,数组都是核心工具。通过实践和理解这些基本操作,你可以有效地提升编程效率和代码质量。

    Excel-VBA宏编程实例源代码-模拟快速排序.zip

    本压缩包“Excel-VBA宏编程实例源代码-模拟快速排序.zip”提供了VBA宏编程的一个实例,用于模拟经典的快速排序算法。快速排序是一种高效的排序算法,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一...

    php选择排序法实现数组排序实例分析_.docx

    PHP选择排序法实现数组排序实例分析 PHP 选择排序法是常用的数组排序算法之一,它通过比较数组中的元素,选择合适的元素进行交换,直到整个数组排序完成。在 PHP 中实现选择排序法可以使用以下步骤: 1. 首先,...

    【课件】8.7.4置换-选择排序.pdf

    置换-选择排序是一种有效的排序算法,尤其是在处理大规模数据集时能显著提高效率。这种排序方法的主要目标是通过减少关键字比较次数和初始归并段的数量来优化整个排序过程。 ### 关键知识点详解 #### 1. 败者树的...

    c开发实例详解--经典

    例如,编写一个快速排序算法,体会递归的魅力。 通过对"C开发实例详解--经典"的学习,你将逐步提升C语言编程技能,从初学者成长为熟练的C程序员,具备解决实际问题的能力。通过不断的实践和探索,你会发现C语言不仅...

    算法的应用实例 主要是各种排序方法

    归并排序是利用分治法实现的排序算法,将数组分成两个子数组,分别排序后再合并,保证了稳定性。归并排序的时间复杂度在所有情况下都是O(n log n),但需要额外的存储空间。 8. **堆排序**(Heap Sort): 堆排序...

    c++链表学习实例--图书管理

    3. 节点号排序:这通常涉及到对链表的遍历,可以使用各种排序算法,如冒泡排序、选择排序或更高效的快速排序、归并排序等。在这个实例中,可能根据图书的编号进行排序。 4. 节点搜索:查找链表中特定值的节点,通常...

    Excel-VBA宏编程实例源代码-快速排序.zip

    在这个名为"Excel-VBA宏编程实例源代码-快速排序.zip"的压缩包中,包含了一个名为"快速排序.xlsm"的文件,该文件很可能是一个含有VBA宏的Excel工作簿,用于实现快速排序算法。 快速排序是一种高效的排序算法,由C.A...

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

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

    堆排序算法实例

    总结来说,"堆排序算法实例"涵盖了计算机科学中一个重要的排序算法——堆排序,它是通过构建和调整堆来实现排序的。结合《算法导论》的理论,我们可以用VC6.0这样的开发环境编写和测试代码,理解堆排序的实现细节,...

Global site tag (gtag.js) - Google Analytics