快速排序和归并排序的相同点和不同点(JAVA)

2023-11-18

首先我们贴出来快速排序的代码

public class QuickSort {
	public int QuickSort(int[] a, int left, int right) {
		int temp = a[left];
		while(left < right)
		{
			while(left < right && a[right] >= temp)
			{
				right--;
			}
			if(left < right && a[right] < temp)
			{
				a[left] = a[right];
			}
			while(left < right && a[left] <= temp)
			{
				left++;
			}
			if(left < right && a[left] > temp)
			{
				a[right] = a[left];
			}
		}
		a[left] = temp;
		
		return left;
	}
	public void partion(int a[], int left, int right) {
		int num;
		if(left < right)
		{
			num = QuickSort(a, left, right);
			partion(a, left, num-1);
			partion(a, num + 1, right);
		}
	}
	public static void main(String[] args) {
		int a[] = {7, 2, 3, 8, 9, 6, 5, 1, 4};
		QuickSort test = new QuickSort();
		test.partion(a, 0, 8);
		for(int i = 0; i < 9; i++)
		{
			System.out.print(a[i]);
		}

	}
	
}

其次我们贴出归并排序的代码 

public class MergeSort {
	public void merge(int[] a, int left, int right) {
		if(left + 1< right) {
			int mid = (left + right) / 2;
			merge(a, left, mid);
			merge(a, mid, right);
			mergesort(a, left, mid, right);
		}
	}
	public void mergesort(int[] a, int left, int mid, int right) {
		int testl[] = new int[10000];
		int testr[] = new int[10000];
		int n1 = mid - left;
		int n2 = right - mid;
		testl[n1] = Integer.MAX_VALUE;
		testr[n2] = Integer.MAX_VALUE;
		int num = right - left;
		for(int i = 0; i < n1; i++)	testl[i] = a[left + i];
		for(int i = 0; i < n2; i++)	testr[i] = a[mid + i];
		int i = 0;
		int j = 0;
		for(int k = left; k < right; k++)
		{
			if(testl[i] < testr[j])
			{
				a[k] = testl[i];
				i++;
			}
				
			else
			{
				a[k] = testr[j];
				j++;
			}		
		}
	}
	public static void main(String[] args) {
		int[] a = {7, 2, 3, 8, 9, 6, 5, 1, 4};
		MergeSort test = new MergeSort();
		test.merge(a, 0, 9);
		for(int i = 0; i < 9; i++)
			System.out.print(a[i]);
	}
}

阅读完这两个代码,我们可以发现这两种排序都存在递归,而差别则在于它们递归的顺序。

归并排序:是先递归在排序

快速排序:是先找到分割的标志来将数组进行大致的切割(标志的左边都是小于标志的值,右边都是大于标志的值),然后再进行递归

当然这两种排序的时间复杂度和空间复杂度也不相同

快速排序的时间复杂度为最快情况为O(nlogn),最坏情况为O(n*n),小计快速排序是冒泡排序的思想改进,快速排序是从整体到部分再到个体,而冒泡排序则是一个个个体去比较,所以快速排序更为高级,当然因为追求过快,而导致不稳定,最坏情况的出发条件则是一个有序的数组,且取得标志为数组的最大值或者最小值,这种情况也可能会导致栈递归过深,导致栈溢出,空间复杂度O(logn);

归并排序的时间复杂度最好情况最坏情况都为O(nlogn)。空间复杂度O(n)。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速排序和归并排序的相同点和不同点(JAVA) 的相关文章

  • C++五种排序方法(有参考)

    快速排序 堆排序 希尔排序 冒泡排序 选择排序 数据结构选择 数组 概要设计 定义一个容量为一亿个整数的数组 定义变量n 用rand函数生成n个随机数 并赋值给数组 用clock函数计算排序所用时间 编写排序函数和主函数 一 快速排序 in
  • 排序算法之快速排序

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢 那就是 快速排序 啦 光听这个名字是不是就觉得很高端呢 假设我们现在对 6 1 2 7 9 3 4 5 10 8 这个10个数进行排序 首先在这个序列中随便找一个数作为基准数 不
  • leetcode-第247场周赛-5798循环轮转矩阵(模拟题)

    5798 循环轮转矩阵 模拟题 题目链接 https leetcode cn com problems cyclically rotating a grid 题目 给你一个大小为 m x n 的整数矩阵 grid 其中 m 和 n 都是 偶
  • 快速排序及三种排序方法 Hoare法/挖坑法/前后指针法

    快速排序 算法思想 基于分治的思想 是冒泡排序的改进型 同冒泡排序一样 快速排序也属于交换排序 通过元素之间的比较和交换位置来达到排序的目的 不同的是 冒泡排序在每一轮只把一个元素冒泡到数列的一端 而快速排序在每一轮挑选一个基准元素 并让其
  • 快速排序详解

    近些天来 由于需要找工作 特将数据机构与算法中的快速排序温习总结了一下 希望对于大家学习有所帮助 首先 快速排序的基本思想是基于分治的思想 是冒泡排序的改进型 首先在数组中选择一个基准点 该基准点的选取可能影响快速排序的效率 后面讲解选取的
  • top-K 算法总结

    问题描述 有 N N gt 1000000 个数 求出其中的前K个最小的数 又被称作topK问题 1 最基本思路 将N个数进行完全排序 从中选出排在前K的元素即为所求 有了这个思路 我们可以选择相应的排序算法进行处理 目前来看快速排序 堆排
  • C语言快速排序,以及注意点。

    快速排序尤其适用于对大数据的排序 它的高速和高效无愧于 快速 两个字 虽然说它是 最常用 的 可对于初学者而言 用它的人却非常少 因为虽然很快 但它也是逻辑最复杂 最难理解的算法 因为快速排序要用到递归和函数调用 快速排序所采用的思想是分治
  • vue 数组按时间排序

  • 十大经典排序算法最强总结

    点击上方 我要学编程 选择 置顶 星标公众号 福利干货 第一时间送达 排序算法属于经典基础算法基本功 笔试面试基本都会涉及和考察的 有原题也有变化 不过基础的几大排序算法还是得尽可能熟悉 能在思路熟悉的前提下手写出代码就更好了 为了防止不提
  • 数据结构与算法之快速排序

    package com yg sort author GeQiLin date 2020 2 26 21 00 import java util Arrays public class QuickSort private static in
  • 记录-常见算法的收集

    1 快速排序 找到基准点的位置 既不浪费空间又可以快一点的排序算法 如 6 1 2 7 9 3 4 5 10 8 这10个数进行排序 首先找到一个数作为基准点 一个参照数 为了方便 让第一个数6作为基准点 然后将这个序列中所有比基准数大的数
  • 【编程之路】常见的排序算法(一)

    常见的排序算法 一 本文将介绍五种基础的排序算法 分别是 冒泡 选择 插入 快速 归并 1 冒泡排序 冒泡排序应该是入门级的排序算法了 class solution def sort arr self arr n len arr for i
  • 八大排序算法-基数排序

    基数排序 radix sort 定义 属于 分配式排序 distribution sort 又称 桶子法 bucket sort 或bin sort 顾名思义 它是透过键值的部份资讯 将要排序的元素分配至某些 桶 中 藉以达到排序的作用 分
  • 冒泡排序与快速排序【C语言】

    冒泡排序 基本思想 对有n个记录的序列进行冒泡排序 首先将第一个数字与第二个数字进行比较 若为逆序 则将两个数字的顺序交换 然后比较第二个数字与第三个数字 若为逆序 则将两个数字的顺序交换 依此类推 经过第一轮排序后 最大的数字将 下沉 到
  • 3月打卡活动第20天 面试题第40题:最小的k个数(简单)

    3月打卡活动第20天 面试题第40题 最小的k个数 简单 题目 输入整数数组 arr 找出其中最小的 k 个数 例如 输入4 5 1 6 2 7 3 8这8个数字 则最小的4个数字是1 2 3 4 解题思路 排序 取前k个值 class S
  • JavaScript 实现 -- 快速排序

    文章目录 快速排序 快排原理 代码实现 快排过程 时间复杂度 算法稳定性 快速排序 快速排序算法是在分治算法基础上设计出来的一种排序算法 和其它排序算法相比 快速排序算法具有效率高 耗费资源少 容易实现等优点 快排原理 选择一个基准数 通过
  • 归并排序(递归,非递归)

    目录 写在前面的话 一 归并思想 二 归并排序递归实现 2 1思想实现 2 2排序实现 2 3代码实现 三 归并排序非递归实现 3 1思路实现 小区间优化 3 2边界值处理 3 2代码实现 写在前面的话 小伙伴们大家好啊 今天依旧小菜鸡库森
  • 排序算法——比较类排序算法讲解以及c++实现

    首先我先抛一个老哥的博客 我是看着他的博客来学习理解 地址 https www cnblogs com onepixel p 7674659 html 首先说一下排序算法分为2类 一类是比较类排序算法 另一类是非比较类排序 这里主要讲常用的
  • 排序算法6-归并排序

    1 什么是归并排序 归并排序是建立在归并操作上的一种有效的排序算法 该算法是采用分治法 Divide and Conquer 的一个非常典型的应用 将已有序的子 序列合并 得到完全有序的序列 即先使每个子序列有序 再使子序列段间有序 若将两
  • 数据结构算法-快速排序

    核心思路 快速排序算法核心思路 选择一个 基准 元素 将数组分为两个子数组 一个包含比基准小的元素 另一个包含比基准大的元素 然后对这两个子数组进行递归排序 基准数 初始化两个索引 i 和 j 分别子数组的开头和结尾 初始化基准元素 bas

随机推荐