归并排序

算法基础(Java)--八大排序算法

独自空忆成欢 提交于 2019-11-26 16:41:10
前言 为了巩固自己的算法能力,重学算法,一个一个自己写,敲。本文主要介绍Java八大排序经典算法。 1. 冒泡排序(BubbleSort) 1.1 基本思想 两个数比较大小,较大的数下沉,较小的数冒起来。 1.2 过程 1.3 算法实现 /** * @Description: 冒泡排序,优化版 平均时间复杂度:O(n^2) * @Date: 21:11 2019/8/7 * @Param: [arr] * @return: int[] */ static int [ ] BubbleSort ( int [ ] arr ) { boolean flag = false ; for ( int j = 1 ; j < arr . length ; j ++ ) { for ( int i = 0 ; i < arr . length - j ; i ++ ) { if ( arr [ i ] > arr [ i + 1 ] ) { int temp = arr [ i ] ; arr [ i ] = arr [ i + 1 ] ; arr [ i + 1 ] = temp ; flag = true ; } } if ( ! flag ) { break ; } } return arr ; } 2. 选择排序(SelctionSort) 2.1 基本思想

归并排序(merge sort)

浪子不回头ぞ 提交于 2019-11-26 16:38:45
接下来的几篇博客都是关于排序的;主要有插入类排序;交换类排序;选择类排序; 插入类排序主要有直接插入如排序(straight insertion sort);折半插入排序(bianry insertion sort); Shell sort; 交换类排序主要有冒泡排序(bubble sort); 快速排序(quick sort); 选择类排序主要有;简单选择排序(simple selection sort); 堆排序(heap sort); 除此之外还有归并排序(merge sort); 基数排序等; 本篇博客是关于归并排序(merge sort)的; 排序直接的数据结构介绍; 所有的排序均以线性表存储;所有的排序算法避免不了交换;交换就要用到临时变量;故将线性表中编号为0的元素不存储任何有效元素;仅仅当做临时变量或者记录的作用来使用;对于有些算法我会给出局部变量做临时变量的算法;若对线性表不是很了解;参见前面关于线性表的博客; 头文件(sort.h); # ifndef _SORT_ typedef int KeyType; typedef struct { KeyType key; }DataType; # endif 头文件(SeqList.h); typedef struct { DataType data[MAXSIZE]; int length; }SeqList, *

归并排序模板!极简版

我怕爱的太早我们不能终老 提交于 2019-11-26 16:38:08
void Sort(int l,int r){ if(l==r)return; int mid=(l+r)>>1; Sort(l,mid),Sort(mid+1,r); int i=l,j=mid+1,k=l; while(i<=mid&&j<=r){ if(a[i]<=a[j])tmp[k++]=a[i++]; else tmp[k++]=a[j++],ans+=mid-i+1; } while(i<=mid)tmp[k++]=a[i++]; while(j<=r)tmp[k++]=a[j++]; for(i=l;i<=r;i++)a[i]=tmp[i]; } Sort(1,n); 来源: https://www.cnblogs.com/Tidoblogs/p/11326677.html

排序算法---归并排序

谁说我不能喝 提交于 2019-11-26 12:27:41
1.归并排序 1 void merge(int *arr, int start, int mid, int end) 2 { 3 int i = start; 4 int j = mid + 1; 5 int k = 0; 6 int len = end - start + 1; 7 int *temp = new int[len]; 8 9 while(i <= mid && j <= end) 10 { 11 if(arr[i] < arr[j]) 12 { 13 temp[k] = arr[i]; 14 k++; 15 i++; 16 } 17 else 18 { 19 temp[k] = arr[j]; 20 k++; 21 j++; 22 } 23 } 24 25 while(i <= mid) 26 { 27 temp[k] = arr[i]; 28 k++; 29 i++; 30 } 31 32 while(j <= end) 33 { 34 temp[k] = arr[j]; 35 k++; 36 j++; 37 } 38 39 for(k = 0; k < len; k++) 40 { 41 arr[start + k] = temp[k]; 42 } 43 } 44 45 void _mergeSort(int *arr, int start, int end)

论分治与归并思想

删除回忆录丶 提交于 2019-11-26 12:11:32
归并排序 要想了解归并思想,就离不开对归并排序的理解,从前看别人的代码百思不得其解,后来看到一张图片顿时领悟,附下: 每次比较两个数组,注意可以是一个数组的两个不同的区间,每次将较小的数存储在一个临时数组中,这样就完成了归并排序。当然,前提是这两个数组是有序的,那么,问题是,如何让这两个数组是有序的呢,这就用到了递归。 merge_sort(left, mid); merge_sort(mid+1, right); 为什么要用递归来实现呢,看下一张图片。 例题 如果只是说理论就显得苦涩难懂,下面贴一个来自洛谷的题目,小试身手。 https://www.luogu.org/problem/P1908 详细讲解已经在代码注释中标明 #include<bits/stdc++.h> using namespace std; int N; int a[100000+10], temp[100000+10]; long long ans = 0; //ans用于记录逆序对的数量 void merge_sort(int l, int r) { if(l == r) return ; int k = 0 ,mid = (l + r)/2; merge_sort(l, mid); merge_sort(mid+1, r); //注意一定要先递归,这样就可以保证l ~ mid区间、mid + 1 ~

排序&mdash;&mdash;二路归并排序

大兔子大兔子 提交于 2019-11-25 21:53:24
算法思想:将无序序列拆分至只有一个关键字的子序列;然后两两归并,直至归并成一个序列 时间复杂度分析:共需进行log2n趟排序,每趟排序执行n次归并操作,因此时间复杂度为O(nlog2n);时间复杂度与初始序列无关,平均和最好和最坏时间复杂度都是O(nlog2n) 空间复杂度:需要转存整个无序序列,空间复杂度为O(n) 代码: void Merge(int arr[],int left,int mid,int right) { int i,k; int left_min = left; int left_max = mid; int right_min = mid+1; int right_max = right; int *b = (int *)malloc((right-left+1)*sizeof(int)); //申请辅助空间,大小为两个子序列总的顶点数 for(k=0;left_min<=left_max&&right_min<=right_max;k++) //每次循环将两个子序列中值最小的保存到b空间中 { if(arr[left_min]<arr[right_min]) b[k] = arr[left_min++]; else b[k] = arr[right_min++]; } if(left_min<=left_max) //如果right的长度小于left

归并排序

柔情痞子 提交于 2019-11-25 19:34:31
归并排序 简介 归并排序是利用归并的思想实现排序的方法,该算法采用经典的分治策略。 归并思想排序的示意图 可以看到,整个排序过程分为分和治两个过程,治的次数为n-1次 治的思路描述 治的阶段,需要将两个已经有序的子序列合并成一个有序序列,比如将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8] 思路:将指针i,j分被指向待合并数组第一个元素,创建一个两数组合并后等长的数组,然后按下面逻辑:每次比较i,j两数大小,小的放入到新数组中,然后后移一位。从大到小类似 代码实现 归并排序 执行时间(时间复杂衡量) 2019 - 08 - 06 11 : 25 : 54 治 治 治 治 治 治 治 2019 - 08 - 06 11 : 25 : 54 归并排序后 = [ 8 , 4 , 5 , 7 , 1 , 3 , 6 , 2 ] 来源: https://blog.csdn.net/qq_29726359/article/details/98727282