首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏myTest

    十大排序

    冒泡排序 public class BubbleSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0}; BubbleSort.sort(arr); for (int i : arr) { System.out.print int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } } 桶排序 class BucketSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6, 9, class CountSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6, 9,

    37330编辑于 2025-02-12
  • 来自专栏springBoot3.0

    十大排序

    目录 1、冒泡排序(Bubble Sort) 2、选择排序(Selection Sort) 3、插入排序(Insertion Sort) 4、希尔排序(Shell Sort) 5、归并排序(Merge Sort) 6、快速排序(Quick Sort) 7、堆 排 序(Heap Sort) 8、计数排序(Counting Sort) 9、桶 排 序 (Bucket Sort) 10 基数排序(Radix Sort) 11、 总 结 首先排序算法可以分为内部排序算法和外部排序算法:在内存中进行的称为内部排序算法,也就是这里所说的这十种算法;相应的,当数据量很大时无法全部拷贝到内存需要使用外存,称为外部排序算法 接下来我们可用如下表来简单概括这十种算法: 十大经典排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 排序方式 稳定性 冒泡排序 O \OmicronO(n2) O \OmicronO countIdx]-- > 0) { arr[arrIdx++] = minVal + countIdx; } } } } 9

    52540编辑于 2023-03-06
  • 来自专栏云计算与大数据技术

    十大排序之冒泡排序

    冒泡排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想可以联想为向湖中下石头和较轻的石头变成泡泡上浮的过程 想象每一块石头处在相应的高度,从上往下相邻两个石头进行比较,较大的石头往下沉,替代下一石头的位置 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现:(未优化版) package com.gxwz.vo; import java.util.Arrays; /** * Java十大排序之冒泡排序 , 9, 16, 0, 10, 49, 100, 24] [26, 2, 9, 16, 0, 10, 49, 24, 100] 第 2 趟排序: [2, 26, 9, 16, 0, 10, 49 , 100] 第 7 趟排序: [0, 2, 9, 10, 16, 24, 26, 49, 100] [0, 2, 9, 10, 16, 24, 26, 49, 100] 第 8 趟排序: ; /** * Java十大排序之冒泡排序(优化版) * @author com * */ public class Sorts { public static void main(String

    35530发布于 2021-04-27
  • 来自专栏CodeWwang

    十大排序算法

    max_heapify(arr, 0, i - 1); } } int main() { int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 }; int len = (int) sizeof(arr) / sizeof(*arr); 计数排序不是比较排序排序的速度快于任何比较排序算法。 vecObj[--vecCount[vecRaw[i - 1]]] = vecRaw[i - 1]; } int main() { vector<int> vecRaw = { 0,5,7,9,6,3,4,5,2,8,6,9,2,1 0; i < vecObj.size(); ++i) cout << vecObj[i] << " "; cout << endl; return 0; } 9

    47530编辑于 2022-08-24
  • 来自专栏云计算与大数据技术

    十大排序之插入排序

    插入排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想相对直观,可以联想自己平常打扑克牌,发牌时自己边摸牌边整理牌顺序的场景 算法思想:A[i] 与 A[i] 之前的元素 A[j逐个进行比较,如果 i  ] 适用场景:数据量小、有序或者部分有序的数列 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现: import java.util.Arrays; /** * Java十大排序之插入排序 , 9, 16, 0, 10, 100, 24] [2, 26, 49, 9, 16, 0, 10, 100, 24] 第 3 趟排序: [2, 26, 49, 9, 16, 0, 10, 100 , 24] [2, 9, 49, 26, 16, 0, 10, 100, 24] [2, 9, 26, 49, 16, 0, 10, 100, 24] 第 4 趟排序: [2, 9, 26, 9, 16, 26, 49, 0, 10, 100, 24] 第 5 趟排序: [0, 9, 16, 26, 49, 2, 10, 100, 24] [0, 2, 16, 26, 49, 9,

    32020发布于 2021-04-27
  • 来自专栏Java架构师必看

    十大排序8–堆排序(Heap Sort)

    排序 文章目录 堆排序 基本介绍 大顶堆举例说明 堆排序的基本思想: 简单的思路 代码实现 将一个数组(二叉树), 调整成一个大顶堆 //编写一个堆排序的方法 完整代码 总结: 图解: 基本介绍 堆排序是利用堆这种数据结构二设计的一种排序算法,堆排序是一种选择排序,他的最好最坏,平均复杂度都为O(nlogn), 它也是不稳定排序 堆是具有一下性质的完全二叉树:每个节点的值都大于或者等于其左右孩子节点的值 调整成一个大顶堆 //将一个数组(二叉树), 调整成一个大顶堆 /** * 功能: 完成 将 以 i 对应的非叶子结点的树调整成大顶堆 * 举例 int arr[] = {4, 6, 8, 5, 9} ; => i = 1 => adjustHeap => 得到 {4, 9, 8, 5, 6} * 如果我们再次调用 adjustHeap 传入的是 i = 0 => 得到 {4, 9, 8, 5, 6} => {9,6,8,5, 4} * @param arr 待调整的数组 * @param i 表示非叶子结点在数组中索引 * @param lenght 表示对多少个元素继续调整, length 是在逐渐的减少

    59220发布于 2021-04-22
  • 来自专栏C++

    【C++】十大排序

    int sum[256] = { 0 }, sum1[256] = { 0 }, sum2[256] = { 0 }, sum3[256] = { 0 }; for (int i = 0; i <= 9; ; sum1[i] += sum[i - 1]; sum2[i] += sum[i - 1]; sum3[i] += sum[i - 1]; } for (int i = 0; i <9; i++) b[--sum[a[i] & 255]] = a[i]; for (int i = 9; i >= 0; i--) a[--sum1[(a[i] >> 8) & 255]] = b [i]; for (int i = 9; i >= 0; i--) b[--sum2[(a[i] >> 16) & 255]] = a[i]; for (int i = 9; i >= 0; i --) a[--sum3[(a[i] >> 24) & 255]] = b[i]; for (int i = 0; i <= 9; i++) printf("a[%d]=%d\n", i,

    22600编辑于 2024-11-19
  • 来自专栏AllTests软件测试

    十大经典排序算法

    十大经典排序算法 目录 1、前言 2、冒泡排序 3、选择排序 4、插入排序 5、希尔排序 6、归并排序 7、快速排序 8、堆排序 9、计数排序 10、桶排序 11、基数排序 1、 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } 9、 * 考虑负数的情况还可以参考: https://code.i-harness.com/zh-CN/q/e98fa9 */ public class RadixSort implements IArraySort for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { // 考虑负数的情况,这里扩展一倍队列数,其中 [0-9]

    88720编辑于 2023-01-05
  • 来自专栏冷环渊的全栈工程师历程

    十大经典排序算法:快速排序debug分析排序过程

    思路分析 快速排序案例 排序过程断点调试 快速排序测速 快速排序 快速排序法介绍: 快速排序(Quicksort)是对冒泡排序的一种改进。 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。 【测试 8w 和 800w】 说明[验证分析]: 如果取消左右递归,结果是 -9 -567 0 23 78 70 如果取消右递归,结果是 -567 -9 0 23 78 70 如果取消左递归 ,结果是 -9 -567 0 23 70 78 public static void quickSort(int[] arr, int left, int right) { // left arr[l] =- 9, -9小于0于是 左边下标后移继续寻找,找到78,此时l = 1 是78对应的数组下标 此时的78 比中位 0 要大,进入右侧比对 显然 arr[r] = -567 比中位数小

    45710编辑于 2022-01-26
  • 来自专栏与你一起学算法

    十大经典排序算法之希尔排序算法

    希尔排序 之前我们讲过冒泡排序、选择排序、插入排序,它们的时间复杂度都是 ,比较高,在实际的场景用应用也比较少。 今天我们要讲的希尔排序虽然也是插入排序的一种,但是它是插入排序的一个高效变形,脱离了 的时间复杂度深渊。 主要思想 希尔排序的思想简单点说就是有跨度的插入排序,这个跨度会逐渐变小,直到变为 1,变为 1 的时候也就是我们之前讲的简单插入排序了。 性能分析 希尔排序的时间复杂度不是我们表面认为的那样,一般来说认为希尔排序的时间复杂度是 ,这个证明起来比较难。 空间复杂度的话,希尔排序没有使用额外的空间,进行存储,是原地排序算法。 希尔排序算法不是稳定的排序算法。前面我们也提到过,只要涉及到大跨度的排序算法,一般都不是稳定的排序算法。 优化 希尔排序的优化主要是针对增量序列的优化。

    75830发布于 2021-03-23
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. 按照算法思想不改动的版本: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime ,这里我们修改成直接和下一个for循环一起,直接进行循环分组 改进后的代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 System.out.println(); return num; } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 O(log N) 到这里十大经典排序算法详解的第二期内容就已经结束了.如果觉得UP的文章写得还可以或者对你有帮助的话,可以关注UP的公众号,新人UP需要你的支持!!!

    42930发布于 2021-01-25
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. : 示例代码: 按照算法思想不改动的版本: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; ,这里我们修改成直接和下一个for循环一起,直接进行循环分组 改进后的代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 System.out.println(); return num; } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 i-1); sort(num, i+1, right); } } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10

    41420编辑于 2022-01-06
  • 来自专栏精讲JAVA

    十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: ? 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 Java 代码实现 /** * 基数排序 * 考虑负数的情况还可以参考: https://code.i-harness.com/zh-CN/q/e98fa9 */ public class RadixSort for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { // 考虑负数的情况,这里扩展一倍队列数,其中 [0-9]

    1.4K50发布于 2018-12-28
  • 来自专栏Java后端开发博客

    十大经典排序算法

    # 十大经典排序算法 介绍 关于时间复杂度 冒泡排序 插入排序 希尔排序 参考资料 # 介绍 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 public static void main(String[] args) throws Exception { int[] sourceArray = {1, 8, 6, 9, arr[j] = tmp; } } return arr; } } 提示 传入的数组为{1, 8, 6, 9, ShellSort { public static void main(String[] args) { int sourceArray[] = new int[]{7,4,2,7,8,9,0,1

    63520编辑于 2022-12-30
  • 来自专栏全栈程序员必看

    十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

    4 第 1 趟,第 2 次比较后的结果: 2 3 5 9 4 第 1 趟,第 3 次比较后的结果: 2 3 5 9 4 第 1 趟,第 4 次比较后的结果: 2 3 5 4 9 第 2 趟 : 2 3 4 5 9 第 3 趟,第 2 次比较后的结果: 2 3 4 5 9   从上面的测试结果可以看出,已经对排序过程进行了优化,因为没有进行第4趟比较。 如[5,3,5,2,9],在array[0]与array[3]元素交换时,序列的稳定性就被破坏了,所以选择排序是一种不稳定的排序算法。 2.3.2 时间复杂度   选择排序的时间复杂度为O(n2)。 假如有[5,2,3,9,4,7]六个元素,下面就以排序过程中的一个步骤(此时有序部分为[2,3,5,9],无序部分为[4,7],接下来要把无序部分的“4”元素插入到有序部分),来展示一下插入排序的运行过程 此时有序部分,由[2,3,5,9]变成[2,3,4,5,9]。   

    1.2K50编辑于 2022-09-14
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前,我们首先来了解一下评判一个算法一般都是从哪些角度来评判的 ,这里我们还是通过下面的图来帮助大家加深印象. image.png 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序, 算法图解: 示例代码 public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime : image.png 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10} 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime

    36210编辑于 2022-01-06
  • 来自专栏乐行僧的博客

    9-选择排序算法

    注意点: 不稳定的排序算法 代码: #include <stdio.h> typedef int bool; #define true 1 #define false 0 void swap(int swap(&a[minIndex], &a[i]); } } } int main() { int a[] = {3, 1, 2, 4, 7, 0, 5, 8, 6, 9}

    14840编辑于 2022-02-25
  • 来自专栏与你一起学算法

    十大经典排序算法之归并排序

    归并排序 前面的时候讲了一些时间复杂度是 的排序算法,虽然希尔排序不是 的排序算法,但是在真正的实际应用中还是比较少的,因为相对来说,排序所需的时间比较长。 今天我就给你介绍另外一种排序算法,归并排序算法。它的时间复杂度是 , 而且是稳定的排序算法,唯一美中不足的一点是它不是原地排序算法,需要使用额外的存储空间。 array1 = [3, 5, 6, 7, 8] array2 = [2, 2, 2, 2] array3 = [4, 3, 2, 1] array4 = [5, -1, 9, 3, 7, 8, 3, -2, 9] merge_sort(array1) print(array1) merge_sort(array2) print(array2) 合并K个升序链表 总结 归并排序是非常高效的排序算法。 时间复杂度数 ,无论要排序的数据是什么样的,性能都是稳定的。 空间复杂度是 另外,合并操作是非常高效且常用的操作,值得我们学习体会。

    47920发布于 2021-03-23
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 算法思想: 说到冒泡,大家的第一反应可能就是下图里面金鱼吐泡泡的画面 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime : 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime

    49860发布于 2021-01-21
  • 来自专栏全栈程序员必看

    十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十大经典排序算法 -归并排序算法详解 十大经典排序算法-堆排序算法详解 十大经典排序算法-计数排序算法详解 十大经典排序算法-桶排序算法详解 十大经典排序算法-基数排序算法详解 一、什么是快速排序 1.概念 快速排序(Quick Sort)是从冒泡排序算法演变而来的,实际上是在冒泡排序基础上的递归分治法。 按照快速排序的思想,我们先选择一个基准元素,进行排序 我们选取4为我们的基准元素,并设置基准元素的位置为index,设置两个指针left和right,分别指向最左和最右两个元素 接着 ) 在极端情况下,快速排序算法每一轮只确定基准元素的位置,时间复杂度为O(N^2) 2.空间复杂度 快速排序算法排序过程中只是使用数组原本的空间进行排序,因此空间复杂度为O(1) 3.稳定性 快速排序算法在排序过程中

    49330编辑于 2022-09-17
领券