选择排序 Selection Sort

1)在数组中找最小的数与第一个位置上的数交换;

2)找第二小的数与第二个位置上的数交换;

3)以此类推

template<typename T>      //泛型
void selectionSort(T arr[], int n){
//数组arr 个数n
for(int i=;i<n;i++){
//寻找[i,n)区间里的最小值
int minIndex = i;
for(int j = i+;j<n;j++){
if(arr[j] < arr[minIndex])
//minIndex 中储存最小元素的下标
minIndex = j;
swap(arr[i], arr[minIndex]);
}
}
}

完整代码:

#include <iostream>

#include "Student.h"

using namespace std;

template<typename T>

void selectionSort(T arr[], int n){

    for(int i =  ; i < n ; i ++){

        int minIndex = i;

        for( int j = i +  ; j < n ; j ++ )

            if( arr[j] < arr[minIndex] )

                minIndex = j;

        swap( arr[i] , arr[minIndex] );

    }

}

int main() {

    // 测试模板函数,传入整型数组

    int a[] = {,,,,,,,,,};

    selectionSort( a ,  );

    for( int i =  ; i <  ; i ++ )

        cout<<a[i]<<" ";

    cout<<endl;

    // 测试模板函数,传入浮点数数组

    float b[] = {4.4,3.3,2.2,1.1};

    selectionSort(b,);

    for( int i =  ; i <  ; i ++ )

        cout<<b[i]<<" ";

    cout<<endl;

    // 测试模板函数,传入字符串数组

    string c[] = {"D","C","B","A"};

    selectionSort(c,);

    for( int i =  ; i <  ; i ++ )

        cout<<c[i]<<" ";

    cout<<endl;

    // 测试模板函数,传入自定义结构体Student数组

    Student d[] = { {"D",} , {"C",} , {"B",} , {"A",} };

    selectionSort(d,);

    for( int i =  ; i <  ; i ++ )

        cout<<d[i];

    cout<<endl;

    return ;

}

相应头文件:Student.h

#include <iostream>

#include <string>

using namespace std;

struct Student{

    string name;

    int score;

    // 重载小于运算法,定义Student之间的比较方式

    // 如果分数相等,则按照名字的字母序排序

    // 如果分数不等,则分数高的靠前

    bool operator<(const Student& otherStudent){

        return score != otherStudent.score ?

               score > otherStudent.score : name < otherStudent.name;

    }

    friend ostream& operator<<(ostream &os, const Student &student){

        os<<"Student: "<<student.name<<" "<<student.score<<endl;

        return os;

    }

};

选择排序 Selection Sort的更多相关文章

  1. 排序算法 - 选择排序(selection sort)

    选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释. 概念 桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选 ...

  2. 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort

    选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...

  3. 排序算法--选择排序(Selection Sort)_C#程序实现

    排序算法--选择排序(Selection Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  4. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  5. [算法] 选择排序 Selection sort

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...

  6. 【排序算法】选择排序(Selection sort)

    0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

  7. 排序--选择排序Selection Sort Java实现

    基本原理 选择排序的简单原理:选择排序算法通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行排序. 将数组两个子数组: 已排序子数组 未排序子数组 选择排序中每次循环都会从未排序子 ...

  8. 选择排序——Selection Sort

    基本思想: 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换:第二次遍历n-2个数,找到最小的数值与第二个元素交换:...第n-1次遍历,找到最小的数值与第n-1个元素交换 ...

  9. 选择排序Selection sort

    顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的无序数组说 ...

随机推荐

  1. swfupload上传文件数量限制之setStats()

    使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成 ...

  2. 11-内涵段子-爬虫(python+正则)

    爬取内涵段子,使用正则进行简单处理: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月14日 @author: sss function:爬去内涵段子(静态网 ...

  3. Solidity字符串拼接实现oraclize动态查询

    solidity本身没有字符串拼接功能,但是如果你恰巧要用oraclize api,那么可以使用oraclize api中的字符串拼接方法(strConcat).之所以oraclize api里会有s ...

  4. Linux 与 BSD

    1)Linux 与 BSD 有什么不同? http://linux.cn/article-3186-1.html 2)BSD(Unix)家族 http://blog.csdn.net/cradmin/ ...

  5. Luogu 4284 [SHOI2014]概率充电器

    BZOJ 3566 树形$dp$ + 概率期望. 每一个点的贡献都是$1$,在本题中期望就等于概率. 发现每一个点要通电会在下面三件事中至少发生一件: 1.它自己通电了. 2.它的父亲给它通电了. 3 ...

  6. 关于Rest Framework中View、APIView与GenericAPIView的对比分析

    关于Rest Framework中View.APIView与GenericAPIView的对比分析  https://blog.csdn.net/odyssues_lee/article/detail ...

  7. Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping

    Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...

  8. Mbatis——动态SQL

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  9. CSS概念 - 可视化格式模型(二) 定位概述(普通流、绝对定位)

    2.定位概念 上一节熟悉了盒模型, 现在来看一下可视化格式模型和定位模型. 理解这两个模型的细微差异是非常重要的, 因为它们一起控制着如何在页面上布置每个元素 2.1 可视化格式模型 CSS有三种基本 ...

  10. LIS问题---HDU1025 Constructing Roads In JGShining's Kingdom

    发现这个说的比较通俗: 假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5.下面一步一步试着找出它.我们定义一个序列B,然后令 i = 1 to 9 ...