ESP-IDF:归并排序测试

ESP-IDF:归并排序测试

/归并排序测试/
void printarry18 (int arr[],int length) {
for(int i=0;i<length;i++) {
cout<<arr[i]<<" ";
}
cout<<endl;
}

void merge(int arr[],int start, int end, int mid,int * temp) {
int length = 0;//记录temp数组的长度

int i_start = start;
int i_end = mid;
int j_start = mid+1;
int j_end = end;

while (i_start <= i_end && j_start <= j_end) {

    if(arr[i_start]<arr[j_start]) {
        temp[length] =arr[i_start];
        length++;
        i_start++;
      } else {
        temp[length] = arr[j_start];
        length++;
        j_start++;
     }
}
//有一边还有一个元素没有拷贝到temp中,判断并拷贝进去
while(i_start<= i_end){
    temp[length] = arr[i_start];
    length++;
    i_start++;
}
while(j_start<= j_end){
    temp[length] = arr[j_start];
    length++;
    j_start++;
}

//把temp中的这段合并序列,拷贝回arr中,从i_start到j_end
for(int i = 0; i<length;i++) {
    arr[start+i] = temp[i];
}

}

void mergeSort(int arr[],int start, int end, int * temp) {

//分组退出条件
if (start >= end){
    return;
}
int mid = (end + start)/2;//分组
//否则递归进行分组到左右只有一个元素,左右都是有序的
mergeSort(arr,start,mid,temp); //左边递归分组
mergeSort(arr,mid+1,end,temp); //右边递归分组
merge(arr,start,end,mid,temp); //左右有序序列合并

}

void test18() {
cout<<“--------test 归并排序 --------”<<endl;
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0,9, 8, 7, 6, 5, 4, 3, 2, 1, 0,9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int temp[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int length = sizeof(arr)/sizeof(int);
printarry18(arr,length);
mergeSort(arr,0,length-1,temp);
printarry18(arr,length);
}

extern “C” void app_main(void)
{
test18();
}

结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值