左神基础课-归并排序

博客介绍了一个排序操作流程,先输入一个数代表要排序的数字数量,接着每次输入一个数,最后输出排序好的数,涉及信息技术领域的排序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先输入一个数: 表示有几个数要排序

然后每次输入一个数

输出 排序好的数

#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
void mergeSort(int* arr,int i, int j);
template<class T>
int getlength(T& arr);
void show(int* arr,int n);
void sortProcess(int* arr,int i,int mid,int j);
int* generateRandomArr(int size, int value_a,int value_b);
int main(){
	int n;
	// int* arr = generateRandomArr(20,0,10);
	int a[]={1,2,3,4,6,8};
	// 指针a不行
	//int* a = new int[7];
	//cout << sizeof(a)/sizeof(a[0]);
	// cout << getlength(a);
	
	while(cin >> n){
		int i=0;
		int* arr = new int[n];
		while(i<n){
			cin >> arr[i];
			if(arr[i]<0 || arr[i]>100)
				return 0;
			i++;
		}	
		if(arr == nullptr ){
			return 0;
		}
		mergeSort(arr,0,n-1);
		show(arr,n);
	}
	return 0;
}
void mergeSort(int* arr,int i, int j){
	//我之前忘记递归的终止条件了
	if(i==j){
		return ;
	}
	//注意这里的取中值
	int mid = i + ((j-i)>>1) ;
	mergeSort(arr,i,mid);
	mergeSort(arr,mid+1,j);
	sortProcess(arr, i, mid, j);
}
void sortProcess(int* arr,int i,int mid, int j){
	int length = j-i+1;
	int* help = new int[length];
	int p1=i;
	int p2=mid+1;
	int l=0;
	while(p1<=mid && p2<=j){
		if(arr[p1]<arr[p2]){
			help[l]=arr[p1];
			p1++;
		}else{
			help[l]=arr[p2];
			p2++;
		}
		l++;
	}
	//若p1结束了
	while(p2<=j){
		help[l]=arr[p2];
		l++;
		p2++;
	}
	//p1 over
	while(p1 <= mid){
		help[l] = arr[p1];
		l++;
		p1++;
	}
	// help go to arr
	l=0;
	while(l<length){
		arr[i+l] = help[l];
		l++;
	}

}
void show(int* arr,int n){
	int i=0;
	while(i<n){
		cout << arr[i];
		i++;
	}
}
int* generateRandomArr(int size, int value_a,int value_b){
	srand((unsigned int)time(nullptr));
	int length = rand()%(size+1);
	int* arr = new int[length];
	int i=0;
	while(i<length){
		// [a,b)
		arr[i] = rand()%(value_b - value_a) + value_a;
		i++;
	}
	return arr;
}
template<class T>
int getlength(T& arr){
	return sizeof(arr)/sizeof(arr[0]);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值