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

原创 2018年04月15日 20:38:16

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

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;
}



数据结构基础系列(9):排序

数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第9部分排序,介绍插入排序、交换排序、选择排序、归并排序、基数排序等各种排序算法,以及各种算法的性能分析。
  • 2015年11月25日 22:02

数据结构算法学习总结-慕课网(一)选择排序(从小到大)

数据结构算法学习总结-慕课网(一)选择排序(从小到大)1.说明语法采用c++,不懂得可以去学习一下c++的基本语法2.思路从小到大,也就是后一个比前一个小的话,那么就把二者的顺序交换3.时间复杂度计算...
  • libinbin147256369
  • libinbin147256369
  • 2018-04-15 16:50:09
  • 15

数据结构算法学习总结-慕课网(六)归并排序(从小到大)

数据结构算法学习总结-慕课网(六)归并排序(从小到大)1.回顾上一节讲到冒泡排序,对它有了基本的认识这一节会讲性能比较好的归并排序2.思路如图首先会创建一个与原{2,3,6,8}一模一样的数组temp...
  • libinbin147256369
  • libinbin147256369
  • 2018-04-16 19:55:20
  • 10

数据结构算法学习总结-慕课网(九)快速排序(从小到大)

数据结构算法学习总结-慕课网(九)快速排序(从小到大)1.回顾上一节降到了自底向上的归并排序这一节将讲一个性能很高的排序,快速排序2.分析快速排序的思想是首先取数组的第一个元素,记为v,找到一个合适的...
  • libinbin147256369
  • libinbin147256369
  • 2018-04-18 16:58:30
  • 7

Java数据结构与算法之常见排序算法总结

目录: 1.概述 2.常用排序方法总结 3.冒泡排序 4.选择排序 5.插入排序 6.归并排序 7.快速排序 8.shell排序 1.概述 学过排序算法的朋友可能都知道排序算法...
  • qq_28057577
  • qq_28057577
  • 2016-10-08 15:54:11
  • 800

几大常用排序算法编写及正确性、效率测试

排序算法写了几遍,总是过段时间就忘,故在此汇总下。 写排序算法重要的是理解它的原理,找到如何遍历及遍历和终止的条件插入排序从左建立有序区,将右侧的值依次插入该有序区,有序区中从插入的位置开始依次后移...
  • kakaxi679
  • kakaxi679
  • 2017-07-28 11:45:05
  • 187

选择排序算法(按从小到大排序)

算法原理是每次循环时都把最小的数字往前提.不多说了直接上代码 public static void seleteMinSort(int[] arry) { for (int i = 0; i &a...
  • Raynorliu
  • Raynorliu
  • 2018-03-08 13:38:53
  • 56

spring学习总结(二)

spring IoC容器(控制反转) 1.使用依赖注入(DI)管理应用程序组件2.容器 BeanFactory容器(为依赖注入DI提供支持) ApplicationContext 容器3.Bea...
  • qq_28198893
  • qq_28198893
  • 2017-11-28 14:20:14
  • 67

【排序算法】各种排序算法学习总结

常用排序算法的复杂度分析整理 具体分析如下:1 冒泡排序(BubbleSort)冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下...
  • jianyuerensheng
  • jianyuerensheng
  • 2016-04-27 19:19:05
  • 1837
收藏助手
不良信息举报
您举报文章:数据结构算法学习总结-慕课网(二)检验排序算法的执行时间,正确性(从小到大)
举报原因:
原因补充:

(最多只允许输入30个字)