选择排序与插入排序对比

概要:

选择排序插入排序

对比方法

    我们通过选择排序和插入排序去进行100000数据量的排序所用时间来对比;

         (1);写一个帮助类;SortHelper;类中有三个函数:generateRandromArray:用于生产随机数组;testSort:测试调用某个函数所花费的时间;copyArray:数组复制。

    

//生成n个的随机数组,,每个元素的范围{RangeL,RangeR}
	int * generateRandromArray(int n, int rangel, int rangeR) {
		int *arr = new int[n];
		srand(time(0));
		for (int i = 0; i < n; i++) {
			arr[i] = rand() % (rangeR - rangel + 1) + rangel+1;
		}

		return arr;
	}
//测试调用某个函数所花费的时间;
	void testSort(string sortName, void(*sort)(T[], int n),int arr[],int n) {
		
			clock_t startTime = clock();
			sort(arr, n);
			clock_t endTime = clock();
			if(isSort(arr, n))
			cout << sortName << ":" << double(endTime - startTime)/CLOCKS_PER_SEC << endl;
		
		return;
	}
	//数组复制
	int * copyArray(int arr[], int n) {
		int * temp=new int[n];
		for (int i = 0; i < n; i++)
			temp[i] = arr[i];
		return temp;
	}
    (2) 写一个Sort类:里面有:selectSort:选择排序,insertSort:插入排序
//选择排序
void selectSort(int *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]);
		}
	}

//插入排序
void insertSort(int arr[], int n) {

		int j;
		for (int i = 1; i < n; i++) {
			int e = arr[i];
			for ( j = i; j >= 1 && e<arr[j - 1]; j--)
				arr[j] = arr[j - 1];

			arr[j] = e;
		}
	}
(3)main函数;

#include<iostream>
#include<cmath>
#include<algorithm>
#include"SortHelper.h"
#include"Sort.h"
using namespace std;
int main() {
	
	int n = 100000;
	int *arr = SortTestHelper::generateRandromArray(n, 0, n);
	int *arr1;
	arr1 = SortTestHelper::copyArray(arr, n);
	arr2 = SortTestHelper::copyArray(arr, n);
	
SortHelper::testSort("选择排序",Sort::selectSort,arr,n);
SortHelper::testSort("插入排序", Sort::insertSort, arr1, n);

	delete[]arr;
	delete[]arr1;

return 0;
}
(3)结果:

通过结果我们可以看出插入排序比选择排序要快一赔;

(4)更深层的体现:如果对于一组近乎有序的数组来说;又会有怎样的差异;为了更好的展现,我们在main函数中先用选择排序将一个数组排好序,然后在分别用选择排序和插入排序进行排序;结果如下:


看到没有,区别大不大,这得多少赔啊大笑,所以说对于近乎有序的数据,采用插入排序是再好不过了。

(5)原因:

介意去看看讲解:插入排序选择排序

我简单说一下:对于一个完全有序的数组:用选择排序,还是得一个个去比较,比如1,2,3,4;1要分别与2,3,4,比较,排序完需要进行4*4-4=12次,对于数组有n个元素来说既是要比较:n*(n-1)次;但是对于插入排序,从2开始,2只要跟1比较一次,3只要跟2比较一次,4只要跟3比较一次,这样下来,对于n个元素:只需要(n-1)次比较;

总结

认真领会,理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值