测试排序时间代码范例

 随机数取法。

传vector引用会耗时很多。

c语言版:

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
//#include<unordered_set>
//#include<unordered_map>
#include<set>
#include<map>
#include<string>
#include<limits.h>
#include<cmath>//
#include<queue>
#include<stack>
#include<numeric>
#include<string.h>
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
#define ll long long
#define endl "\n"
//#define int long long

int n = 1e5;

int arr[500005], arr1[500005];
int getRandom(int l, int r)
{
	int ran = rand();
	return l + ran % (r - l + 1);
}
void q_s(int l, int r)
{
	if (l >= r)return;

	int aim = getRandom( l, r);//挖坑法,随机数来选择坑,数学上证明这样总体最快,对于顺序这种极端情况也能接近于nlogn
	swap(arr[l], arr[aim]);
	aim = arr[l];
	int al = l, ar = r;
	while (al < ar)
	{
		while (arr[ar] >= aim && al < ar)
		{
			ar--;
		}
		while (arr[al] <= aim && al < ar)
		{
			al++;
		}
		swap(arr[al], arr[ar]);
	}
	swap(arr[l], arr[ar]);
	q_s(l, al - 1);
	q_s(al + 1, r);
}
void q_sort()
{
	srand(time(NULL));
	q_s(0,n - 1);
}


void solve()
{
	for (int i = 0; i < n; i++)
	{
		arr[i] = rand();
	}
	clock_t ct = clock();
	q_sort();
	ct = clock() - ct;
	cout << ct << endl;
}
signed main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t = 20;
	srand(time(NULL));
	//cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

vector版:

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
//#include<unordered_set>
//#include<unordered_map>
#include<set>
#include<map>
#include<string>
#include<limits.h>
#include<cmath>//
#include<queue>
#include<stack>
#include<numeric>
#include<string.h>
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
#define ll long long
#define endl "\n"
//#define int long long

int getRandom(vector<int>& arr, int l, int r)
{
	int ran = rand();
	return l + ran % (r - l + 1);
}
void q_s(vector<int>& arr, int l, int r)
{
	if (l >= r)return;

	int aim = getRandom(arr, l, r);//挖坑法,随机数来选择坑,数学上证明这样总体最快,对于顺序这种极端情况也能接近于nlogn
	swap(arr[l], arr[aim]);
	aim = arr[l];
	int al = l, ar = r;
	while (al < ar)
	{
		while (arr[ar] >= aim && al < ar)
		{
			ar--;
		}
		while (arr[al] <= aim && al < ar)
		{
			al++;
		}
		swap(arr[al], arr[ar]);
	}
	swap(arr[l], arr[ar]);
	q_s(arr, l, al - 1);
	q_s(arr, al + 1, r);
}
void q_sort(vector<int>& arr)
{
	srand(time(NULL));
	q_s(arr, 0, arr.size() - 1);
}
int n = 4e5;
void solve()
{
	vector<int>arr(n);
	for (int i = 0; i < n; i++)
	{
		arr[i] = rand();
	}
	clock_t ct = clock();
	q_sort(arr);
	ct = clock() - ct;
	cout << ct << endl;
}
signed main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t = 20;
	srand(time(NULL));
	//cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用快速排序算法的 C++代码示例: ```cpp#include <iostream> using namespace std; //交换数组中两个元素的位置void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } // 将数组划分为两个子数组,并返回划分点的索引int partition(int arr[], int low, int high) { int pivot = arr[high]; //选取最后一个元素作为划分点 int i = (low -1); // 比划分点小的元素的索引 for (int j = low; j <= high -1; j++) { // 如果当前元素小于等于划分点,则将其与i指向的元素交换位置 if (arr[j] <= pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i +1], &arr[high]); // 将划分点放到正确的位置 return (i +1); // 返回划分点的索引} // 快速排序递归函数void quickSort(int arr[], int low, int high) { if (low < high) { // 划分数组,并获取划分点的索引 int pi = partition(arr, low, high); // 对划分点左边的子数组进行递归排序 quickSort(arr, low, pi -1); // 对划分点右边的子数组进行递归排序 quickSort(arr, pi +1, high); } } // 打印数组元素void printArray(int arr[], int size) { for (int i =0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } int main() { int arr[] = {64,25,12,22,11 }; int n = sizeof(arr) / sizeof(arr[0]); cout << "原始数组: "; printArray(arr, n); quickSort(arr,0, n -1); cout << "排序后的数组: "; printArray(arr, n); return0; } ``` 这是一个经典的快速排序算法实现。在 `partition` 函数中,选择最后一个元素作为划分点,将数组划分为小于等于划分点和大于划分点的两个子数组。然后,通过递归地对子数组进行排序,最终得到有序数组。在 `main` 函数中,我们定义了一个示例数组并对其进行排序。最后,通过 `printArray` 函数打印排序后的数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值