选择排序

选择排序(JAVA)

非 Y 不嫁゛ 提交于 2020-12-05 10:44:47
package org.rev.algorithm; /** * 选择排序,算法复杂度O(n^2),算法步骤如下: * * 1. 对于一组数列,选出最小的数和第一个位置的数交换。 * * 2. 在剩余的数中,选出最小的数,与第二个位置的数交换。 * * 3. 如此循环,直到倒数第二个数与最后一个数比较位置。 * */ public class SelectionSort { public static void main(String[] args) { int[] data = {39, 11, 38, 97, 86, 37, 12, 4, 51, 18}; SelectionSort ss = new SelectionSort(); ss.selectionSort(data); System.out.println("排序之后:"); ss.printData(data); } /** * 选择排序,每次都遍历,都把最小的数放在前面。 * * @param data 待排序的数组 */ public void selectionSort(int[] data) { for (int i = 0; i < data.length; i++) { int min = i; // 记录最小值的索引 for (int j = i + 1; j < data.length; j++)

内部排序算法系列---直接选择排序

拟墨画扇 提交于 2020-04-06 20:06:17
常见的内部排序分类: 我们来看下直接选择排序,其实思路很简单,就是从第一个数字开始依次跟后面的数字进行比对来交互位置,每一趟可以找出一个最小的;但是需要经过n-1趟比较。直接上程序吧: import java.util.Arrays; /** * @author stefanie zhao * @date 2014-9-25 下午04:09:48 */ public class SelectSort { public static void selectSort(DataWrap[] data){ System.out.println("begin sort......"); int arrayLength = data.length; for(int i = 0 ; i <= arrayLength - 1 ; i++){ for(int j = i + 1 ; j < arrayLength ; j++){ if(data[i].compareTo(data[j]) > 0){ DataWrap tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } System.out.println(Arrays.toString(data)); } } public static void main(String[] args) {

排序算法:插入排序、希尔排序、冒泡、快速排序、选择排序、堆排序以及归并和基数排序

风流意气都作罢 提交于 2019-12-13 18:31:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 由于博客迁移至 www.coderyi.com ,文章请看 http://www.coderyi.com/archives/412 排序分为内部排序和外部排序,内部排序指待排序的记录在内存中,外部排序的记录数量很大,以至于内存放不下而放在外存中,排序过程需要访问外存。这里仅介绍内部排序,包括插入排序、交换排序、选择排序、归并排序、基数排序。 1 插入排序 1.1直接插入(straight insertion sort) 算法思路:数组{k1,k2,……,kn},排序一开始k1是一个有序序列,让k2插入得到一个表长为2的有序序列,依此类推,最后让kn插入上述表长为n-1的有序序列,得到表长为n的有序序列。 c实现的代码: // 从小到大排序 int a[]={98,97,34,345,33}; int k=sizeof(a)/sizeof(a[0]); int j; for (int i=1; i<k; i++) { int temp=a[i]; for (j=i-1; j>=0&&a[j]>temp; j--) { a[j+1]=a[j]; } a[j+1]=temp; } 1.2折半插入(binary insertion sort) 算法思路:当直接插入进行到某一趟时,对于r[i]来讲,前面i

3. 选择排序—直接选择排序(Straight Selection Sort)

帅比萌擦擦* 提交于 2019-12-13 18:31:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 基本思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: 初始状态:无序区为R[0..n-1],有序区为空。 第1趟排序:在无序区R[0..n-1]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[0] 交换,使R[0..0]和R[1..n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。 …… 第i趟排序:第i趟排序开始时,当前有序区和无序区分别为R[0..i-1]和R[i..n](0≤i≤n-1)。 该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[0..i] 和R[i+1..n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。 这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 算法实现 直接选择排序算法,Java实现,代码如下所示: public abstract class Sorter { public abstract void sort(int[] array); } public class StraightSelectionSorter extends Sorter { @Override public void sort(int[] array) {