选择排序

选择排序O(n^2)

排序算法

是最基本最常用的算法,就直接从排序算开始我的博客
在这里插入图片描述

一,简单选择排序

linux-CLion
i代表数组的位置,j遍历位置i后面的所有元素依次和位置i比较,注意:j必须遍历到结尾,不可提前中止。

//下面是选择排序的过程
template<typename T>
void selectSort(T arr[],int n){
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++)
            if(arr[j]<arr[i])
                swap(arr[i],arr[j]);
    }
}

完整的代码和测试用例

//
// Created by lm on 19-3-5.
//

#ifndef SORTTESTHELPER_SORTTESTHELPER_H
#define SORTTESTHELPER_SORTTESTHELPER_H

#include <iostream>
#include <cassert>
/*生成包含n个rangeL到rangeR范围的随机整数的数组*/
using namespace std;
namespace SortTestHelper{
    int * generateRandomArray(int n,int rangeL,int rangeR){
        int * arr=new int[n];
        assert(rangeL<=rangeR);
        srand(time(0));
        for(int i=0;i<n;i++)
            arr[i]=rand()%(rangeR-rangeL+1)+rangeL;
        return arr;
    };
    /*打印输出*/
    template<typename T>
    void printArray(T arr[],int n){
        for(int i=0;i<n;i++)
            cout<<arr[i]<<" ";
        cout<<endl;
        return;
    }
}
#endif //SORTTESTHELPER_SORTTESTHELPER_H
/*自定义类型*/
#ifndef SORTTESTHELPER_STUDENT_H
#define SORTTESTHELPER_STUDENT_H

#include <iostream>
#include <string>
using namespace std;
struct student{
    string name;
    int score;
    student(){};
    student(string name,int score){
        this->name=name;
        this->score=score;
    };
    //重载<运算符
    bool operator<(const student& st){
        return score!=st.score ? score<st.score:name<st.name;
    }
    重载<<运算符,wield能访问类对象内容,声明为友元函数
    friend ostream& operator<<(ostream& out,student& s){
        out<<"student: "<<s.name<<" "<<s.score<<endl;
        return out;
    }
};
#endif //SORTTESTHELPER_STUDENT_H
//主函数
#include <iostream>
#include "SortTestHelper.h"
#include "Student.h"
template<typename T>
void selectSort(T arr[],int n){
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++)
            if(arr[j]<arr[i])
                swap(arr[i],arr[j]);
    }
}
int main() {
    student *st=new student[5];
    st[0]={"A",94};
    st[1]={"C",92};
    st[2]={"B",92};
    st[3]={"D",93};
    st[4]={"E",900};

    selectSort(st,5);
    for(int i=0;i<5;i++)
        cout<<st[i];
    int n=100;
    int *arr=SortTestHelper::generateRandomArray(n,0,n);
    selectSort(arr,n);

    SortTestHelper::printArray(arr,n);
    delete[] arr;
    return 0;
}
//输出
/home/lm/CLionProjects/SortTestHelper/cmake-build-debug/SortTestHelper
student: B 92
student: C 92
student: D 93
student: A 94
student: E 900
1 1 1 4 4 6 6 8 9 9 9 9 10 12 13 13 13 14 15 15 16 19 21 24 25 25 25 25 26 26 27 28 28 29 30 30 32 32 33 33 34 35 35 37 38 39 43 44 46 48 50 50 51 51 51 52 52 53 53 55 58 58 59 59 62 64 64 65 67 68 69 69 71 72 73 73 73 75 76 76 77 80 80 84 85 85 85 85 90 91 94 94 94 94 96 96 97 98 99 100 

Process finished with exit code 0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值