选择排序 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. 二,python第一个程序

    1.命令窗口进入python安装目录 2. >>> 100+200 300 很简单吧,任何有效的数学计算都可以算出来. 如果要让Python打印出指定的文字,可以用print语句,然 ...

  2. 在Build Path中包含其他工程

    ------------siwuxie095                                 在 TestBuildPath 的 Build Path 中包含 SupportProje ...

  3. jps, jinfo命令

    jps主要用来输出JVM中运行的进程状态信息. -q 不输出类名.Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l 输出main类或Jar的全限名 -v 输出传入JVM的参数 ...

  4. 框架和cms区别

    cms:精装房,拎包即可入住 框架:毛坯房,内部装修可根据自己需求来 选择策略:个性化需求不高的话,可以选择cms

  5. DataTable 设置primarykey 后进行 Merge操作

    1.先查看概念 可以看highplayer博客 http://blog.csdn.net/highplayer/article/details/6613817 2. protected void st ...

  6. SpringMVC——拦截器

    Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口 preHandle():这个方法在业务处理 ...

  7. C#将DataTable数据导出到EXCEL的两种方法

    1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...

  8. - Unknown tag (c:set).

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  9. 自定义UINavigationBar的背景【转】

    from:http://cocoa.venj.me/blog/custom-navbar-background/ 为了让我们的应用程序更加美观,我们往往希望对iPhone自带的控件进行一点自定义.比如 ...

  10. leetcode Submission Details

    代码: #include<iostream> #include<vector> using namespace std; struct ListNode { int val; ...