选择排序:
分为直接选择排序, 堆排序
直接选择排序 :第i次选取( i到array.Length-1中间)最小的值,放在i位置。
堆排序 : 首先,数组里面用层次遍历的顺序放一棵完全二叉树。从最后一个非终端结点往前面调整,直到到达根结点,这个时候除根节点以外的所有非终端节点都已经满足堆 得条件了,于是需要调整根节点使得整个树满足堆得条件,于是从根节点开始,沿着它的儿子们往下面走(最大堆沿着最大的儿子走,最小堆沿着最小的儿子走)。 主程序里面,首先从最后一个非终端节点开始调整到根也调整完,形成一个heap, 然后将heap的根放到后面去(即:每次的树大小会变化,但是 root都是在1的位置,以方便计算儿子们的index,所以如果需要升序排列,则要逐步大顶堆。因为根节点被一个个放在后面去了。降序排列则要建立小顶 堆)
直接选择排序的源代码:
package com.zhaozy.sort; import java.util.Random; /** * 直接选择排序 * @author zhaozy * */ public class StraitSelectionSort { public static void main(String[] args) { Random random = new Random(); int [] dataset = new int [10]; System. out .println( " 原始数据为: " ); for ( int i = 0; i < dataset. length ; i++) { dataset[i] = ( int ) (random.nextDouble() * 100); System. out .print(dataset[i] + " " ); } System. out .println(); StraitSelectionSort strait = new StraitSelectionSort(); for ( int i = 0; i < dataset. length ; i++) { // 找出 dataset [i] 之后小于它的值的下标 int minIndex = strait.getMindIndex(dataset, i); // 和 dataset [i] 交换位置,如果之后没有比 dataset [i] 小的数,即 dataset [i] 和 dataset [i] 交换 strait.exchange(dataset, i, minIndex); } System. out .println( " 排好序后: " ); for ( int i = 0; i < dataset. length ; i++) { System. out .print(dataset[i] + " " ); } } /* * 交换数组中某两个数值的位置的函数 */ public void exchange( int [] dataset, int i, int j) { if (i < dataset. length && j < dataset. length && i < j && i >= 0 && j >= 0) { int temp = dataset[i]; dataset[i] = dataset[j]; dataset[j] = temp; } } /* * 找出 dataset [i] 之后小于它的值的下标 */ public int getMindIndex( int [] dataset, int i) { int minIndex = 0; int min = Integer. MAX_VALUE ; for ( int j = i; j < dataset. length ; j++) { if (dataset[j] < min) { min = dataset[j]; minIndex = j; } } return minIndex; } }
到目前为止,自己经历的笔试题中碰到过选择排序(具体方法任选,要是再让我做的话,我当然选择直接选择排序)和快速排序,听同学说他笔试的时候碰到过冒泡排序,不知道其他的排序碰到的几率大不大,以后慢慢看吧。
相关推荐
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
冒泡排序是最简单的排序算法之一,它通过重复遍历待排序的列表,比较相邻元素并交换位置,直到没有任何一对数字需要比较。C++实现冒泡排序如下: ```cpp void bubbleSort(int arr[], int n) { for (int i = 0; i ;...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
在本文中,我们将深入探讨四种常见的内部排序方法:插入排序、快速排序、选择排序以及再次提到的选择排序。这四种排序方法在不同的场景下各有优劣,理解它们的工作原理和性能特性对于优化算法至关重要。 **1. 插入...
2. 冒泡排序:是最简单的排序算法之一,通过不断交换相邻位置的元素来逐渐达到排序的目的。每一轮遍历都能确保最大(或最小)的元素被放置到正确的位置,重复这个过程直到整个数组排序完成。 3. 选择排序:每次从未...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
本主题涵盖了六种经典的排序算法:希尔排序、堆排序、快速排序、简单选择排序、插入排序和冒泡排序。这些算法各有特点,适用于不同的场景,下面将逐一详细介绍。 1. **希尔排序**:希尔排序是由Donald Shell提出的...
冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...
在编程领域,排序是基础且重要的操作之一,用于组织数据并优化后续的处理。本项目涵盖了五种经典的排序算法:快速排序、堆排序、归并排序、插入排序和选择排序。接下来,我们将深入探讨这些算法的原理、实现及性能...
1. **直接插入排序**:直接插入排序是最基础的排序算法之一。它的工作原理是将待排序的元素逐个与已排序的部分进行比较,找到合适的位置插入。这种算法对于小规模或部分有序的数据集表现较好,但对于大规模无序数据...
冒泡排序和选择排序是两种基础的排序算法,它们在计算机科学中有着广泛的应用,尤其在教学和理解排序原理时非常关键。这两种算法虽然简单,但在特定情况下可以通过优化提高效率。 首先,我们来详细探讨冒泡排序。...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
冒泡排序是最简单的排序算法之一,通过比较相邻元素并交换位置来实现排序。每一轮遍历会确保最大的元素“冒”到数组的末尾。这个过程会重复,直到所有元素都排好序。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1...
交换排序 选择排序 冒泡排序 插入排序
微信小程序 首字母排序选择 (源码)微信小程序 首字母排序选择 (源码)微信小程序 首字母排序选择 (源码)微信小程序 首字母排序选择 (源码)微信小程序 首字母排序选择 (源码)微信小程序 首字母排序选择 (源码)微信小...
- 直接插入排序是最基础的排序算法之一,它的工作原理类似于人们手动整理扑克牌。首先,数组中的第一个元素被当作已排序的部分,然后逐个将后续元素插入到已排序的序列中,保持序列的有序性。 - 在排序过程中,每...
冒泡排序 简单选择排序 c语言基础 排序算法 数组操作 排序算法实验 简单的c语言程序 排序算法输出