算法初步
Posted daishangjing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法初步相关的知识,希望对你有一定的参考价值。
算法初步
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类型
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} 此外,我们可以自定义一个类型,对其进行排序,声明一个头文件,
#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年期限。不求最后玩转算法,只希望到最后不要被算法反杀。
以上是关于算法初步的主要内容,如果未能解决你的问题,请参考以下文章