先输入一个数: 表示有几个数要排序
然后每次输入一个数
输出 排序好的数
#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]);
}