选择排序基础(java实现)

算法实现:

红宝书版本:

public class Selection
{
 public static void sort(Comparable[] a)
  {
      int N=a.length;
      for (int i=0;i<N;i++)
         {
            int min=i;
              for(int j=i+1;j<N;j++)
                 if (lessa([j],a[min])) min =j;
              exch(a,i,min);
         }
  }
}

基于int数组的实现:

public static void selectSort(int[]a)
{
    int minIndex=0;
    int temp=0;
    if((a==null)||(a.length==0))
        return;
    for(int i=0;i<a.length-1;i++)
    {
        minIndex=i;//无序区的最小数据数组下标
        for(intj=i+1;j<a.length;j++)
        {
            //在无序区中找到最小数据并保存其数组下标
            if(a[j]<a[minIndex])
            {
                minIndex=j;
            }
        }
        if(minIndex!=i)
        {
            //如果不是无序区的最小值位置不是默认的第一个数据,则交换之。
            temp=a[i];
            a[i]=a[minIndex];
            a[minIndex]=temp;
        }
    }
}

注:除去前者定义的less(Comparable a, Comparable b) 和 exch(Comparable[] a,int a,int b)简化了代码之外,还有一个字面上的区别,即外层for循环中的判定条件一个是i<N、另一个是i<N-1;其实i=N-1时,需要被比较的最后一个数必然已经是最大的数了,不需要进行交换;不过只有一次比较操作,两者没什么本质区别。

选择排序的本质即从第一位开始,遍历之后的所有剩余元素,找出其中最小的一个放到第一位;接下来再从第二位开始,找出数组中第二小的数,依次类推。

选择排序有两个重要特点:

  1. 运行时间和输入无关

即不论数组的初始状态的有序程度,选择排序的比较次数都没有变化。考虑到比较次数与元素个数的关系是N²/2,所以当一个已经比较有序的数组使用选择排序会很不划算。

2.数据的移动操作最少

移动操作次数是一个常量,最多为N,其他的算法都不具备这个特征。

时间: 2024-10-10 14:59:45

选择排序基础(java实现)的相关文章

选择排序算法Java与Python实现

Java 实现 package common; public class SimpleArithmetic { /** * 选择排序 * 输入整形数组:a[n] [4.5.3.7] * 1. 取数组编号为i(i属于[0 , n-2])的数组值 a[i],即第一重循环 * 2. 假定a[i]为数组a[k](k属于[i,n-1])中的最小值a[min],即执行初始化 min =i * 3. 取数组编号为m(m属于[i+1,n-1])的数组值 a[m],即第二重循环 * 4. 若 a[m] < a[m

选择排序(Java版)

package com.love.test; import java.util.Scanner; /** * @author huowolf * 选择排序实现 *思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完. */ public class SelectSort { public static void selectSort(int[] arr) { for(int i=0;i<arr.length;i++) { int k=i; //k用来保存数组中

排序算法-选择排序(Java)

package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className SelectSort * @date 2019/12/4 11:27 * @package com.rao.linkList * @Description 选择排序 */ public class SelectSort { /** * 选择排序 * @param arr */ public static void selectSor

简单选择排序(Java)

简单选择排序: 每一趟在整个记录中找到最小的那个作为有序序列的第i个记录. class SelectSort{ public void p(int[] a){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } public void select(int[] a){ int m=a.length; for(int i=0;i<m;i++){ int min=a

冒泡排序 选择排序 插入排序 java

双向冒泡 1 package com.huang; 2 3 public class _014_bubb_sort { 4 5 int[] b={1,2}; 6 static int a[]={12,4,35,65,43,63,2,6,9,544,43543}; 7 public static void main(String[] args) { 8 display(); 9 10 //冒泡 11 for(int i=0;i<a.length/2;i++) 12 { 13 for(int j=0

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

使用C语言和Java分别实现冒泡排序和选择排序

经典排序算法--冒泡和选择排序法 Java实现冒泡排序 基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素放到顶端,最终达到完全有序,首先看个动图: 我们要清楚一点,冒泡排序是相邻元素的两两比较,再看下图是否会清晰些: 输入的数据为:10 30 40 33 5 78 11 100 23 66 第一次排序,从第一个数10依次比较,若10比后者小,则进行交换,当比较到5时,10比5大,所以10就停在第四个位置,再用5去比较,后面的数都比5大,所以5就排到最后了

选择排序详解

选择排序 选择排序是最简单的排序方法之一,它的做法是这样的:首先,找出数组中最小的那个元素,将最小的元素与第一个元素的位置互换,然后找出数组中第二小的元素,与数组中第二个元素互换位置(如果要比较的元素是当前最小,则自己和自己交换),以此类推,直到遍历了整个数组.这种方法叫做选择排序,因为它会不断地选择剩余元素中的最小者. 表格1-1排序步骤 初始值: 1 10 -5 9 8 7 3 第一趟: -5 10 1 9 8 7 3 第二趟: -5 1 10 9 8 7 3 第三趟: -5 1 3 9 8

排序五 简单选择排序

要点 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 简单排序处理流程: ( 1 )从待排序序列中,找到关键字最小的元素:( 2 )如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换:( 3 )从余下的 N - 1 个元素中,找出关键字最小的元素,重复( 1 ).( 2 )步,直到排序结束. 如图所示,每趟排序中,将当前第 i 小的元素放在位置 i 上. 核心代码 public void selec