码迷,mamicode.com
首页 > 编程语言 > 详细

算法初步

时间:2018-11-06 00:59:06      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:运算   gen   aci   i++   sse   最小   整型   generate   std   

算法初步

1, 选择排序

最简单粗暴地,也是大O比较大的

#include <iostream>

 

 

#include <algorithm>

 

 

 
 

 

using namespace std;

 

 

 
 

 

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

 

 

 
 

 

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

 

 

// 寻找[i, n)区间里的最小值

 

 

int minIndex = i;

 

 

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

 

 

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

 

 

minIndex = j;

 

 

 
 

 

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

 

 

}

 

 

 
 

 

}

 

 

 
 

 

int main() {

 

 

 
 

 

int a[10] = {10,9,8,7,6,5,4,3,2,1};

 

 

selectionSort(a,10);

 

 

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

 

 

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

 

 

cout<<endl;

 

 

 
 

 

return 0;

 

}

注意:只针对整形数组进行排列

2, 利用泛型模板进行排序,使得排序的对象更加多种多样(在数据结构中其实也可以使用泛型模板)

在函数前加上template<typename T>,将排序数组类型声明为T类型

 

 

#include <iostream>

 

 

#include "Student.h"

 

 

 
 

 

using namespace std;

 

 

 
 

 

template<typename T>

 

 

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

 

 

 
 

 

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

 

 

 
 

 

int minIndex = i;

 

 

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

 

 

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

 

 

minIndex = j;

 

 

 
 

 

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

 

 

}

 

 

}

 

 

 
 

 

int main() {

 

 

 
 

 

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

 

 

int a[10] = {10,9,8,7,6,5,4,3,2,1};

 

 

selectionSort( a , 10 );

 

 

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

 

 

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

 

 

cout<<endl;

 

 

 
 

 

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

 

 

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

 

 

selectionSort(b,4);

 

 

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

 

 

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

 

 

cout<<endl;

 

 

 
 

 

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

 

 

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

 

 

selectionSort(c,4);

 

 

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

 

 

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

 

 

cout<<endl;

 

 

 
 

 

}

此外,我们可以自定义一个类型,对其进行排序,声明一个头文件,

#ifndef INC_02_SELECTION_SORT_USING_TEMPLATE_STUDENT_H

 

 

#define INC_02_SELECTION_SORT_USING_TEMPLATE_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;

 

 

}

 

 

};

 

 

 
 

#endif

3,随机生成算法测试用例

建立一个头文件,如下:

#ifndef SORTTESTHELPER_H_INCLUDED

#define SORTTESTHELPER_H_INCLUDED

#include<iostream>

#include<ctime>

#include<cassert>

using namespace std;

namespace SortTestHelper{

    int *generateRandomArray(int n,int rangeL,int rangeR){

        assert(rangeL<=rangeR);

        int *arr=new int [n];

        srand(time(NULL));

        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;

    }

}

 

#endif // SORTTESTHELPER_H_INCLUDED

主函数:

int main() {

 

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

    int N = 20000;

    int *arr = SortTestHelper::generateRandomArray(N,0,N);

    selectionSort(arr,N);

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

        cout<<arr[i]<<" ";

    cout<<endl;

    //SortTestHelper::printArray(arr,N);

    delete[] arr;

 

return 0;

}随机生成10000个数排序

 不谋万世者,不足谋一时。算是给自己个约定吧,2年期限。不求最后玩转算法,只希望到最后不要被算法反杀。

算法初步

标签:运算   gen   aci   i++   sse   最小   整型   generate   std   

原文地址:https://www.cnblogs.com/daishangjing/p/9912359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!