算法_简单选择排序

每一轮选一个最小的和最靠前的位置交换。

栗子 : 3  7  1  5

第一轮:1  7  3  5

第二轮:1  3  7  5

第三轮:1  3  5  7

    for(int i = 0;i<n;i++){//这里应该可以是i<n-1,最后一轮只剩一个无所谓
        k = i;
        for (int j = i + 1; j < n; j++) {
            if (a[k] > a[j]) {
                k = j;
            }
        }
        if (k != i) {
            temp = a[i];
            a[i] = a[k];
            a[k] = temp;
            }
    }

简单选择排序进化 ------>二元选择排序

一轮选择一个最小值------>一轮选择一个最大值一个最小值

void SelectSort(int r[],int n) {
    int i ,j , min ,max, tmp;
    for (i=1 ;i <= n/2;i++) {
        // 做不超过n/2趟选择排序
        min = i; max = i ; //分别记录最大和最小关键字记录位置
        for (j= i+1; j<= n-i; j++) {
            if (r[j] > r[max]) {
                max = j ; continue ;
            }
            if (r[j]< r[min]) {
                min = j ;
            }
      }
      //该交换操作还可分情况讨论以提高效率
      tmp = r[i-1]; r[i-1] = r[min]; r[min] = tmp;
      tmp = r[n-i]; r[n-i] = r[max]; r[max] = tmp;   

    }
}
时间: 2025-01-04 02:02:14

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

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

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

冒泡排序算法和简单选择排序算法的js实现

之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(data) { for(let i=0;i<data.length-1;i++){ for(let j=0;j<data.length-1-i;j++){ if(data[j]>data[j+1]){ [data[j],data[j+1]]=[data[j+1],data[j]]; } } }

算法之简单选择排序和堆排序

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

排序算法之简单选择排序

基本思想 在一组元素中选择具有最小排序码的元素,若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素对调:在未排序的剩下的元素中反复运行以上步骤,直到剩余元素仅仅有一个为止. 代码 private void selectSort(int[] a, int left, int right) { for (int i = left; i < right; i++) { int k = i; int temp; for (int j = i + 1; j <= right; j++) {

【算法】 简单选择排序

/// <summary> /// 简单选择排序 /// 思路 (与冒泡排序类似): /// 遍历源集合,每次选出最大或最小元素,放在未排序子集末尾或首位 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <param name="func"&g

数据结构和算法之简单选择排序

/// <summary> /// 简单选择排序 /// 给定数组:int[] arr={里面n个数据}: /// 第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换: /// 第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换: /// 以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成. /// </summary> /// <param n

算法 之 简单选择排序法

简单排序算法:每一趟选择最小的与该趟第一个数交换,而不动其他数. 例如  3,8,2,5,7第1趟:2与3交换  2,8,3,5,7 第2趟:3与8交换  2,3,8,5,7 第3趟:5与8交换  2,3,5,8,7 第4趟:7与8交换  2,3,5,7,8 关键点在于:保持其他数不动,只把索引为0的数(第一个数)与最小的数作交换. 时间复杂度 O(n^2) $a = array(3,8,2,5,7,1,6,4); $index = 0; for($j = 0 ; $j < count($a)-

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

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

大话数据结构——简单选择排序

在学了冒泡排序后,会发觉这种算法就是不断比较交换.虽简单直接,显然给人一种繁琐的感觉.那有没有更好一点的算法呢?这当然有啦,没有就糟糕透了 :-P 这篇文章介绍一种较冒泡要好的排序算法:简单选择排序 看到“选择”这两字估计也猜到一二了.没错,这种算法的思想就是:待找到了最适合的那位数的位置我才选择与它进行交换 这样做,我们大大省下了很多不必要的交换.因为在代码编写中,交换函数是经常使用,所以一般将其封装成一个函数进行调用.如果存在非常多不必要的交换操作,这就产生了非常多不必要的函数调用.要知道,