算法一之简单选择排序

一、  选择排序的思想

选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

二、算法实现

public void selectionSort(int[] data){

       int minIndex;     //最小记录下标
       int temp;         //临时空间

       //data.length-1趟
       for(int i=0;i<data.length-1;i++){
            //在i到data.length-1中匹配最小记录
            minIndex=i;   //默认最小值为第一个记录
            for(int j=i+1;j<data.length;j++){
                 //保存最小记录的下标
                 if(data[minIndex]>data[j]){
                     minIndex=j;
                 }
            }  

//最小记录不在下标i处,互交换数据
            if(minIndex!=i){
                 temp =data[i];
                 data[i]=data[minIndex];
                 data[minIndex]=temp;
             }
      }
}

三、复杂度

简单选择排序中,所需进行记录移动的操作次数较少,其最小值为“0”,最大值为3(n-1)。

然而,无论记录的初始序列如何,所需进行的关键字间的比较次数相同,均为n(n-1)/2,因此,总的时间复杂度为O(n2)。

时间: 2024-08-25 22:44:04

算法一之简单选择排序的相关文章

常见排序算法导读(3)[简单选择排序]

这一节将介绍简单选择排序(Simple Selection Sort). 在介绍简单排序算法之前,先给出排序的确切定义,并简单介绍一下排序算法的稳定性. 排序的确切定义 假设含有n个对象的序列为{R[0], R[1], ..., R[n-1]}, 其对应的关键字(key)序列为{K[0], K[1], ..., K[n-1]}. 所谓排序, 就是确定0, 1, ..., n-1的一种排列p[0], p[1], ..., p[n-1], 使各个关键字满足如下的非递减(升序)或非递增(降序)关系:

排序算法篇--之简单选择排序

简单选择排序,就是执行n-i次比较,然后从n-i+1个数据中选择最小的值,如果最小值不是第i(1=<i<=n)个,则和第i个交换. 1 <?php 2 $arr = array(9,5,4,8,7,6,0,3,2,1); 3 4 /** 5 * 返回经过简单选择排序算法排序后的数组 6 * @param $array array 要进行排序的数组 7 * return array 进过排序后的数组 8 */ 9 function SelectSort($array){ 10 11 for

Java排序算法(二):简单选择排序

[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用变量记住它的下标. [java实现] public class SimpleSelectionSort { public static void main(String[] args) { int[] arr = { 9, 1, 5, 8, 3, 7, 4, 6, 2 }; System.out.p

Hark的数据结构与算法练习之简单选择排序

/* * 简单选择排序 */ public class SimpleSort { public static void main(String[] args) { int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 }; SimpleSortMethod(arrayData); for (int integer : arrayData) { System.out.print(integer); System.out.print(" "); } }

算法3-排序-简单选择排序

基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换: 然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. publicclass selectSort { public selectSort(){ int a[]={1,54,6,3,78,34,12,45}; int position=0; for(int i=0;i<a.length;i++){ int j=i+1; position=i; int temp=a[i]; for(;j

八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

经典排序算法--简单选择排序

算法简介 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 白话理解 依然已排队为例,在排队时,有的老师可能会选择这样排序,先在一列中选出最矮的,放在第一位,然后选出第二矮的,放在第二位.队伍完成排序.而这就是选择排序的思想. 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素: (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换: (3)从余下的 N - 1 个元素中,找出关键字最小

【算法】简单选择排序C语言实现

上一篇我们谈到了冒泡排序,实现了两个版本的冒泡排序,不知道大家有没有对冒泡排序的特点进行一下总结呢?其实冒泡排序还算是比较暴力的,因为它频繁不断的进行交换,那么这样的话,我们的计算机的计算频率就会很高,不算是很高效,那么我们可不可以找到一种交换次数少一点的方法呢?这就引出了我们接下来要介绍的简单选择排序算法了. 简单选择排序的基本思想就是通过N-1次的关键字间的比较,从N - i + 1个记录中选择一个关键字最小记录,并和第i(1<= i <= n)个记录交换,其实简单选择排序和冒泡排序在思路

经典(java版)排序算法的分析及实现之三简单选择排序

选择排序-简单选择排序 选择排序的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子系列的最后,直到全部记录排序完毕.简单选择排序也叫直接选择排序. 基本算法: 将给定待排序序列A[0....n],第一次从A[0]~A[n-1]中选取最小值,与A[0]交换,第二次从A[1]~A[n-1]中选取最小值,与A[1]交换,....,第i次从A[i-1]~A[n-1]中选取最小值,与A[i-1]交换,.....,第n-1次从A[n-2]~A[n-1]中选取最小值,与A[n-2]