用递归实现归并排序(不会呀 不知道哪里错了)

#include<iostream>
using namespace std;
#include<vector>
#include "Vector.h"

void merge(int  num[], int tem[], int lo, int hi);
//归并排序
void mergesort(int num[],int tem[], int lo, int hi)
{
    //int *tem01;
    if (hi - lo == 0 )  tem[lo] = num[lo];

    else {
        int mid = (lo + hi) >> 1;
        mergesort(num, tem,lo, mid);
        mergesort(num, tem, mid+1, hi);
        merge(num, tem, lo, hi);//tem01是两个变量的中转站
    }
}
void merge(int  num[], int tem[], int lo, int hi) {
    int mid = (lo + hi) >> 1;
    int n = mid + 1;
    if ((lo <= mid) && (mid + 1 <= hi || num[lo] > tem[mid + 1])) {
        num[lo++] = tem[lo++];
    }
    if ((mid + 1 <= hi) && (lo <= mid || num[lo] < tem[mid + 1])) {
        num[lo++] = tem[(n)++];
    }
}
int main()
{
    int v1[10] = {1,2,3,0,9,8,7,6,5,4};
    int v2[10];
    mergesort(v1,v2, 0,9);
    for (int i = 0; i < 10; i++)
    {
        cout << v2[i]<< endl;
    }

    system("pause");
}
时间: 2024-07-30 22:45:04

用递归实现归并排序(不会呀 不知道哪里错了)的相关文章

数据结构--递归实现归并排序

1 /*通过递归实现归并排序 2 * 具有思路:将要排序的数组不断划分,直到只有一个元素的时候停止: 3 * 这是递归的基准条件,返回进行排序. 4 * 归并排序的时间复杂度:O(NlogN):考虑的是复制数据到workarr和workarr到arr的次数 5 * 6 * */ 7 public class MergeWithRecursion { 8 static int items = 6; 9 static int[] arr = {10,8,9,59,2,4}; 10 public st

HDU Today(自己的代码不知道哪里错了一直没A抄袭大神的)

http://acm.hdu.edu.cn/showproblem.php?pid=2112 本题题目意思非常简单,麻烦的就是处理一下字符串,这是我能力欠缺的地方 #include<stdio.h>#include<iostream>#include<string.h>#define maxint 200000000int map[201][201],visit[201],n,m,s,e;int dis[202];char name[201][32];int find(

如何使用递归实现归并排序

归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序列段间有序.若将两个有序表合并成一个有序表,称为二路归并. 数据结构的学习过程中,我们经常会遇到排序算法,其中归并排序是一种高效并且算法复杂度比较简单的一种.在课本的介绍中,大部分都会介绍归并排序算法.但是,每次看书总是觉得很容易,自己尝试去实现时,总是会出错.学习数据结构已经有一段时间了

怎样使用递归实现归并排序

归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用.将已有序的子序列合并,得到全然有序的序列.即先使每一个子序列有序,再使子序列段间有序.若将两个有序表合并成一个有序表,称为二路归并. 数据结构的学习过程中.我们常常会遇到排序算法,当中归并排序是一种高效而且算法复杂度比較简单的一种. 在课本的介绍中,大部分都会介绍归并排序算法.可是,每次看书总是认为非常easy,自己尝试去实现时,总是会出错. 学习数据结构已经有

递归实现归并排序

1 /************************************************************************* 2 > File Name: merge_sort.cpp 3 > Author: 4 > Description: 5 > Created Time: Sun 26 Jul 2015 10:15:24 AM HKT 6 *******************************************************

【递归】归并排序

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int a[10000],b[10000],n; 5 6 7 void Merge(int left,int mid,int right) 8 { 9 int l=left,m=mid,k=left; 10 while(l<mid&&m<=right) 11 { 12 if(a[l]<a[m]) 13 { 14 b[k]=a[l]; 15 l++; 16

LeetCode() Basic Calculator 不知道哪里错了

class Solution {public:    int calculate(string s) {        stack<int> num;        stack<char> symbol;        for(int i=0;i<s.length();i++){            if(s[i]==' ')   continue;            else if(s[i]=='('||s[i]=='+'||s[i]=='-')  symbol.pu

解决那道不知道怎么错了的题————Conversions

大家是否还记得我在前面发表过的一篇文章,就是一道题,觉得很简单,但是自己运行的都对,提交就不对,我终于知道是怎么回事了,让我来告诉你们真相吧.原来是题目有点问题,数据有点问题,说白了,就是输入N之后,不是接着跟N组数据,而是大于或者小于或者等于,是不是......再看一下我提交后的正确的代码吧 <span style="font-size:18px;"><strong>#include<stdio.h> #include<string.h>

关于数组的封装不知道为什么错了,具体代码如下

main.cpp #include<iostream> #include"Myarray.h" //实现数组的封装 using namespace std; int main() { Myarray a; for(int i=0;i<a.length();i++) { a.setData(i,i); } for(int i=0;i<a.length();i++) { cout << a.getData(i)<<endl; } Myarra