心法领悟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] + " ");// 把排序后的数组元素显示到文本域中 } } }
相关推荐
C#下多线程实现实例----一个图形化的排序算法演示程序.pdf
29. 排序综合(限1 人完成) 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: ...PS:采用了直接选择排序算法、冒泡排序、希尔排序、直接插入排序这四种排序算法。
上述资源是位与、选择、冒泡、插入、qsort算法的实例,在vc6.0下可以编译并得到预期结果。
排序也称排序算法 (Sort Algorithm),排序是将 一组数据 , 依指定的顺序 进行 排列的过程 。这篇文章主要介绍了数据结构与算法---排序算法(Sort Algorithm),需要的朋友可以参考下
快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例)
算法导论上堆排序算法的vc6.0下的Test实例。
排序算法 冒泡 、快速、直接插入、堆排序、希尔排序、归并排序
python选择排序算法实例总结电脑资料.doc
主要介绍了C++选择排序算法实例,本文先是介绍了什么是选择排序,然后给出了实现代码,需要的朋友可以参考下
提出从Fuzzy数据向Vague数据的两个转化公式,提出Vague集之间的相似度量公式。数据转化公式和相似度量公式是Vague模式排序法的两个基础。该方法能进行目标价值排序,也能为...应用实例表明Vague模式排序法是实用的。
算法导论上计数排序算法的vc.60Test实例
C 冒泡排序算法的实例源代码,一些排序方法的代码集锦,该函数模板使用冒泡法对集合元素进行排序,参数说明: collection 集合对象,集合对象必须提供 [] 操作。 element 集合元素,该参数的作用仅仅是确定集合...
实例099 使用选择排序法对一维数组进行排序 117 实例100 使用冒泡排序法对一维数组进行排序 118 实例101 使用快速排序法对一维数组进行排序 119 实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序...
本文实例讲述了Python实现的插入排序,冒泡排序,快速排序,选择排序算法。分享给大家供大家参考,具体如下: #!/usr/bin/python # coding:utf-8 #直接插入排序 def insert_sort(list): for i in range(len(list))...
插入 交换 选择 归并 基数,各种排序算法实例
冒泡派速算法实例,C语言编写,是简单排序算法的一种。
java可运行排序算法:①插入排序、②冒泡排序、③选择排序、④学生学号按照成绩高低排序的一个简单实例。在java工程项目的源文件src中建立Array包,可运行这四个.java文件,便于对java中的排序算法及数组结构进一步...
C#中常用排序算法的一些实例代码,程序还提供了一个演示窗口,以命令提示符的方式显示算法...这些算法主要有冒泡排序法、选择排序法、交叉排序法等多种排序方法。通过这个小实例你会对这几种常用的排序算法有一些理解。
php选择排序法实现数组排序实例分析_.docx
Java做的算法的应用。冒泡排序、二分排序、双向冒泡排序等算法的应用。带有例题。