心法领悟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语言中实现。 **冒泡排序(Bubble Sort)** 冒泡排序是一种基础的排序算法,其基本思想是通过重复...
直接插入排序.c 直接选择排序.c 10个数据结构课程设计例子 查找.c 二叉排序树.c 二叉树层次遍历.c 二叉树非递归遍历.c 二叉树建立.c 快速排序.c 括号匹配.c 冒泡排序.c 直接插入排序.c 直接选择排序.c 10个数据结构...
直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题
- **空间复杂度**:折半插入排序是原地排序算法,不使用额外的数据结构,因此空间复杂度为O(1)。 #### 七、应用场景 折半插入排序适用于小规模数据集或部分已排序的数据。在这些场景下,通过减少比较次数可以显著...
本项目提供的“插入排序算法C语言程序”是一个实现这一算法的实例,有助于理解插入排序的工作原理。 1. 插入排序算法概念: 插入排序的核心在于每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列...
直接插入排序是一种简单直观的排序算法,它...以上就是关于直接插入排序的详细解析,结合提供的文档“直接插入排序法.doc”,可以更深入地了解其理论知识和实例应用。通过学习和实践,可以更好地掌握这一基础排序算法。
VB基于插入法排序例子的开源源码,插入法排序后,最后输入各数组数据。插入元素后,其余数组元素后移,然后将数据x插入数组指定位置,学习好本例子,有助于你了解VB中的动态数组、静态数组、键盘事件等实用技巧。...
在给定的代码片段中,我们可以看到作者尝试使用C++实现了直接插入排序(`InsertSort`)、冒泡排序(`Bubble`)、直接选择排序(`SSort`)和快速排序(`Qsort`)的部分代码。通过`Element`类的实例化,作者记录了每种...
本文实例讲述了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
4. **类的实例化与对象的使用**:在主程序中,我们可能需要创建`SortAlgorithms`和`UserInterface`的实例,通过调用类的方法来执行排序算法或控制界面。 5. **成员函数的访问控制**:根据需求,可以使用`public`、`...
总结起来,"js代码-直接插入排序-2"项目提供了使用JavaScript实现直接插入排序的实例,通过分析`main.js`文件中的代码,我们可以学习到如何在JavaScript环境中编写和应用这种排序算法。同时,`README.txt`文件可以...
- **插入排序**:如直接插入排序、折半插入排序、2-路插入排序等,基本思路是将元素逐个插入到已排序的序列中。 - **交换排序**:如冒泡排序和快速排序,通过交换元素位置来实现排序。 - **选择排序**:如简单...
本文总结了各种排序实例,包括直接插入排序、shell 排序、选择排序、冒泡排序、快速排序、归并排序等,并对每种排序算法的特点、优缺点和应用场景进行了分析。 1. 排序算法的分类 根据平均时间复杂度,可以将排序...
8. **优化策略**:在实际应用中,可以通过优化策略提高二叉排序树的性能,例如使用自平衡的二叉排序树,或者在插入新节点时调整树结构以保持较好的平衡状态。 在VC++环境中实现二叉排序树,可以使用C++的数据结构和...
本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...
- **直接插入排序.c**:直接插入排序是将元素逐个插入已排序部分的排序方法,适用于小规模或部分有序的数据,时间复杂度同样为O(n^2)。 - **直接选择排序.c**:直接选择排序每次找出未排序部分的最小元素并放到已...
标题中的"java直接插入排序示例"是指使用Java编程语言实现的直接插入排序算法的实例。描述中提到,插入排序虽然在最坏情况下的时间复杂度仍然是O(n²),但通常情况下其效率高于冒泡排序和选择排序。这是因为插入排序...
本文将介绍C++实现的几种排序算法,包括插入排序、希尔排序、冒泡排序、快速排序和选择排序,并探讨友元在类中的使用。 首先,`sample` 类用于存储需要排序的数据,它包含一个整型数组 `A` 和一个整型变量 `n`,...