心法领悟052:如何评价排序算法的好坏。
评价排序算法好坏的标准主要有两条,分别为:
- 所需的时间和所需的辅助空间
-
算法本身的复杂程度
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");// 追加换行符 } }
相关推荐
java 代码实例 冒泡排序 直接插入排序 数组中插入数据
直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题
VB基于插入法排序例子的开源源码,插入法排序后,最后输入各数组数据。插入元素后,其余数组元素后移,然后将数据x插入数组指定位置,学习好本例子,有助于你了解VB中的动态数组、静态数组、键盘事件等实用技巧。...
折半插入排序
本文实例讲述了Python实现的...#直接插入排序 def insert_sort(list): for i in range(len(list)): Key = list [i] #待插入元素 j = i - 1 while(Key < list>= 0): list[j+1] = list[j] #后移元素 list[j] = Key
29. 排序综合(限1 人完成) 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: ...PS:采用了直接选择排序算法、冒泡排序、希尔排序、直接插入排序这四种排序算法。
6.1.5 插入与排序 251 实例6-5:插入特征 251 6.2 特征操作 253 6.2.1 特征成组 253 实例6-6:特征成组 253 6.2.2 特征镜像 254 实例6-7:特征镜像 254 6.2.3 特征阵列 255 实例6-8:特征阵列 255 6.2.4 特征复制...
主要介绍了Python实现的直接插入排序算法,结合实例形式分析了Python直接插入排序算法的定义与使用相关操作技巧,代码备有较为详尽的注释便于理解,需要的朋友可以参考下
1、 掌握直接插入排序、折半插入排序、冒泡排序、快速排序和归并排序等排序算 法的思想。 2、 实现直接插入排序、折半插入排序、冒泡排序、快速排序和归并排序等排序算 法的编程应用。 二、 问题描述 实现数据的折半...
面试必考题目 各种排序实例及点评 包括直接插入排序、shell排序、选择排序、冒泡排序、快速排序、归并排序
主要介绍了C语言排序方法,包含10种排序,数据结构课程设计实例二叉树建立遍历冒泡排序快速排序_二叉排序树_二叉树层次遍历_二叉树非递归遍历_二叉树建立括号匹配直接插入选择代码大学生本科毕业设计期末作业排序...
实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序法对一维数组进行排序 122 实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素的顺序 125 4.3 常用集合的使用 126 实例106 向...
主要介绍了C语言基本排序算法之插入排序与直接选择排序实现方法,结合具体实例形式分析了插入排序与直接选择排序的定义、使用方法及相关注意事项,需要的朋友可以参考下
10个数据结构课程设计例子: 1、查找.c 2、二叉排序树.c 3、二叉树层次排序.c 4、二叉树非递归遍历.c 5、二叉树的建立.c 6、快速排序.c ...9、直接插入排序.c 10、直接选择排序.c 注意,亲测有效!
C语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 查找 二叉排序树 二叉树层次遍历 二叉树非递归遍历 二叉树建立 快速排序 括号匹配 冒泡排序 直接插入排序 直接选择排序
排序算法 冒泡 、快速、直接插入、堆排序、希尔排序、归并排序
主要介绍了PHP排序算法之直接插入排序(Straight Insertion Sort),结合实例形式较为详细的分析了直接插入排序算法的原理与实现技巧,需要的朋友可以参考下
使用队列方法进行排序: 直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的
直接插入排序 1.排序思路 arr[0…i-1]为有序区(刚开始时i=1,有序区只有arr[0]一个元素),arr[i…size]为待排序区,每次将待排序区的第一个元素arr[i]插入到有序区中的适当位置,每趟操作都使有序区增加一个元素...
c语言 ...直接插入排序.c 冒泡排序.c 括号匹配.c 快速排序.c 二叉树建立.c 二叉树非递归遍历.c 二叉树层次遍历.c 二叉排序树.c 查找.c 10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.txt