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

 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 static void main(String[] args) {
11         display();
12         mergeSort();
13         display();
14
15     }
16
17     public static void mergeSort(){
18         int[] workarr = new int[items];
19         recMergeSort(workarr,0,items-1);
20     }
21
22     private static void recMergeSort(int[] workarr, int low, int high) {
23         if(low == high){
24             return;
25         }
26         else{
27             int mid = (low + high) / 2;
28             recMergeSort(workarr,low,mid);
29             recMergeSort(workarr,mid+1,high);
30             merge(workarr,low,mid+1,high);
31         }
32
33     }
34
35     private static void merge(int[] workarr, int low, int mid, int high) {
36         //workarr index
37         int j = 0;
38         int lowbound = low;
39         int midindex = mid - 1;
40         int n = high - lowbound + 1;
41         //进行归并到工作区数组
42         while(low <= midindex && mid <= high){
43             if(arr[low] < arr[mid]){
44                 workarr[j++] = arr[low++];
45             }
46             else{
47                 workarr[j++] = arr[mid++];
48             }
49         }
50
51         while(low <= midindex){
52             workarr[j++] = arr[low++];
53         }
54
55         while(mid <= high){
56             workarr[j++] = arr[mid++];
57         }
58
59         //将工作区部分有序的数组复制到原来的数组
60         for(int i = 0; i < n;i++){
61             arr[lowbound + i] = workarr[i];
62         }
63     }
64
65     public static void display(){
66         for(int i = 0; i < arr.length;i++){
67             System.out.print(arr[i] + " ");
68         }
69         System.out.println();
70     }
71
72 }
时间: 2024-07-30 22:45:05

数据结构--递归实现归并排序的相关文章

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

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

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

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

python数据结构与算法——归并排序

归并排序: 原理与C语言实现 参考:白话经典算法系列之五 归并排序的实现 1. 容易对有序数组A,B进行排序. 2. 为了使得A,B组内数据有序:可以将A,B组各自再分成二组. 3. 经过不断分组,当分出来的小组只有一个数据时(有序),合并相邻二个小组. 这样通过先递归的分解数列,再合并数列就完成了归并排序. 代码摘自<Python Algorithm> 1 # 对数组seq进行归并排序 2 # 返回排序后数组 3 def mergesort(seq): 4 mid = len(seq)//2

数据结构 递归和非递归方式实现二叉树先序、中序和后序遍历

二叉树的先序遍历顺序是根.左.右:中序遍历顺序是左.根.右:后序遍历顺序是左.右.根. 递归方式实现如下: 1 public class TreeNode { 2 private int value; 3 private TreeNode left, right; 4 5 public TreeNode(int data) { 6 value = data; 7 } 8 9 // 递归方式实现先序遍历 10 public void preorder(TreeNode treeNode) { 11

数据结构-- 递归 排序

一.递归 一.递归的介绍递归是一种数学上分而自治的思想A.将原问题分解为规模较小的问题进行处理1.分解后的问题与原问题的类型完全相同,但是规模较小2.通过小规模问题的解,能够轻易求得原问题的解B.问题的分解时有限的(递归不能无限进行)1.当边界条件不满足时,分解问题(递归继续进行)2.当边界条件满足时,直接求解(递归结束)C.递归在程序设计中的应用a.递归函数1.函数体中存在自我调用的函数2.递归函数必须有递归出口(边界条件)3.函数的无限递归将导致程序崩溃示例: int sum(unsigne

数据结构基础(5) --归并排序

归并排序的基本思想: 将两个或两个以上的有序子序列"归并"为一个有序序列:假定待排序表含有n个记录, 则可以看成是n个有序的子表, 每个子表长度为1, 然后两两归并, 得到[n/2]个长度为2或1的有序表,; 再量量归并, ...., 如此重复, 直到合并成为一个长度为n的有序表为止, 这种排序方法称为2-路归并排序.如图为一个2-路归并排序的一个示例: /**说明: 将有序的记录序列 initList[left:mid] 和 initList[mid+1:right]归并为有序的记录

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

#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] = nu

数据结构与算法——归并排序

/*crate a new array to put the elements sorted*/void MergeSort(int a[], int n){    int *TmpArray; TmpArray = (int*)malloc(n*sizeof(int));    if (TmpArray != NULL){        MSort(a, TmpArray, 0, n - 1);        free(TmpArray);    }}//We could utilize th

递归实现归并排序

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