01_排序_选择排序

【基本原理】

对于给定的一组数据,经过第一轮比较后得到最小的数据,然后将该数据与第一个数据的位置进行交换;

然后对不包括第一个数据以外的其它数据进行第二轮比较,得到最小的数据并与第二个数据进行位置交换;

重复该过程,直到进行比较的数据只有一个时为止。

【举例】

待排序数组

【38,65,97,76,13,27,49】

排序过程

第一趟:【13,65,97,76,38,27,49】

第二趟:【13,27,97,76,38,65,49】

第三趟:【13,27,38,76,97,65,49】

第四趟:【13,27,38,49,97,65,76】

第五趟:【13,27,38,49,65,97,76】

第六趟:【13,27,38,49,65,76,97】

最后结果:【13,27,38,49,65,76,97】

【代码实现】

package com.sort;

public class TestSelectSort {
    public static int[] selectSort(int[] a){

        int length=a.length; //先得到数组的长度
        int i,j,n,tmp,flag;
        for(i=0;i<length;i++){
            tmp=a[i];  //tmp为每次循环的第一个位置
            flag=i;
            for(j=i+1;j<length;j++){
                if(tmp>a[j]){
                    tmp=a[j]; //这一步不要忘记了,因为tmp不一定是最小的,必须用用循环过的最小的和当前的数据比较
                    flag=j;   //如果发现比tmp小的数据,将flag标记为当前位置,循环结束,flag标志的是最小数字的下标
                }
            }
            if(flag!=i){    //如果flag已经不再是刚开始第一个位置的i,那么将两者的数据调换位置
                n=a[i];
                a[i]=a[flag];
                a[flag]=n;
            }
        }
        return a;
    }
    public static void main(String[] args){
        int a[]={2,9,0,8,7,1,5,4,3,6};
        a=selectSort(a);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }
}
时间: 2024-10-14 04:45:34

01_排序_选择排序的相关文章

排序高级之选择排序_选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素的排序方

数组常见的操作_选择排序

排序分类:       内部排序:就是将需要处理的所有数据都加载到内部存储器中进行排序                交换式排序法:是运用数值较后,依判断规则对数据位置进行交换,以达到排序的目的                    冒泡排序法(Bubble Sort)                    快速排序法(Quick Sort)                选择式排序法:                     选择排序法(Select Sort)                

数据结构_选择排序

选择排序介绍 选择排序(Selection sort)是一种简单直观的排序算法.它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕.  总结:两个for循环=一个for喜欢i=0-(n-1)+一个for循环寻找比i小的数组的坐标用min存起来+一个交换的过程 /* * 设置一个参考存储坐标,和冒泡的区别是不需要频繁的移动交换,它只需要找坐标

选择排序—简单选择排序(Simple Selection Sort)

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

选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现

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

【排序】选择排序算法

特别说明 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 选择排序思想 选择排序又称为简单选择排序,主要思想描述如下: 01.假设待排序列表为 .选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分: 注意:刚开始时  部分其实可认为只有一个元素,即: 元素 02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置: 03.重复02步骤,直到  部分为空为止: 编码参考 简单选择排序是非常简单的一种排序

选择排序——直接选择排序

选择排序 每一趟从待排序的元素中,选出最小的元素,放到已经排好序的序列的后面直到全部元素排序完毕.在这个过程中,有序区逐步扩大,而无序区逐渐缩小. 直接选择排序 直接选择排序是将无序区内的最小元素追加到有序区的后面,从而扩大有序区的范围.而我们又是在原地排序,所有也就相当与交换无序区的第一个元素和无序区最小元素的位置. 我们需要一个游标来追踪无序区的最小元素. 假设为 K , 我们又同时假设每一趟排序前,无序区的第一个元素就是当前无序区的最小元素. 也就是说 k 在每一次排序开始时,都是指向无序

排序(1)---------选择排序(C语言实现)

选择排序的基本思想: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 我的通俗解释: ①第一遍先在整个序列中寻找到最小值,将其移到首位,序列被分为1,n-1; ②继续在n-1中寻找最小值,将其移到n-1的首位,也就是整个序列的第二位 ③以此类推,反复操作步骤②,得到结果 选择排序的主要优

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

简单选择排序 简单选择排序属于选择排序, 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部排完为止. 1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少. 每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置 原始队列:   3 5 6 2 4 1(最小元素1与3交换) 第一步: 1 5 6 2 4 3 (当前最小元素2与5交换) 第二步: 1 2 6 5 4 3 (当前最小元素