数据结构算法学习总结-慕课网(二)检验排序算法的执行时间,正确性(从小到大)

数据结构算法学习总结-慕课网(二)选择排序执行时间,正确性(从小到大)

1.思路

执行时间:只需要记录排序之前的时间,排序之后的时间,然后两者相减就可以的排序所需的时间

正确性:循环数组中的元素,如果有数组中的前一个元素比后一个元素要大,则该排序算法不正确,否则正确

注意角标,如果越界可能出现不可预知的错误的

2.代码

SortTestHelper.h

#ifndef SORTTESTHELPER_H_
#define SORTTESTHELPER_H_

#include <iostream>
#include <ctime>
#include <cassert>
using namespace std;

namespace SortTestHelper{
	//生成n个元素的随机数组,每个元素的随机范围为[rangeL,rangeR]
	int* generateRandomArray(int n,int rangeL,int rangeR){
		assert(rangeL <= rangeR); //为了程序稳定性,如果rangeL>rangeR,那么程序不会往下执行
		int *arr = new int[n];
		srand(time(NULL));//随机种子,需要导入ctime库
		for(int i = 0;i<n;i++){
			arr[i] = rand() % (rangeR - rangeL + 1) + rangeL; //自己可以动笔算一下
		}
		return arr;
	}


	/**
	 * 检验排序的正确性
	 */
	template<typename T>
	bool isSorted(T arr[],int n){
		for(int i = 0;i<n;i++){
			//注意,如果i=n-2时,实际上会比较arr[n-2]和arr[n-1]的值,此时数组已经比较完毕
			if(i<n-1 && arr[i]>arr[i+1]){
				return false;
			}
		}
		return true;
	}


	/**
	 * 测试排序所需要的时间
	 */
	template<typename T>
	void testSort(string sortName,void(*sort)(T arr[],int n),T arr[],int n){
		clock_t startTime = clock();
		sort(arr,n);
		clock_t endTime = clock();
		assert(isSorted(arr,n));
		cout <<sortName<<" : "<< double(endTime - startTime) /CLOCKS_PER_SEC <<"s" << endl;
		return;
	}
}



#endif /* SORTTESTHELPER_H_ */

SelectionSort.cpp

#include <iostream>
#include "Student.h"
#include "SortTestHelper.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[minIndex],arr[i]);//把a,b交换位置
	}
}


template<typename T>
void printArray(T arr[],int n){
	for(int i = 0;i<n;i++)
		cout << arr[i] << " "; //循环打印数组中的元素
	cout << endl;
}




int main() {
	int n = 100000;
	int *arr = SortTestHelper::generateRandomArray(n,1,100);


	SortTestHelper::testSort("Selection Sort",selectionSort,arr,n);
	delete[] arr;//new的方式开辟数组空间,防止内存泄漏
	return 0;
}



猜你喜欢

转载自blog.csdn.net/libinbin147256369/article/details/79952850