选择排序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