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

    算法篇-python排序算法-3

    >归并排序 列表分成两段有序,然后分解成每个元素后,再合并成一个有序列表,这种操作就叫做一次归并。 应用到排序中,把列表分成一个元素一个元素的,一个元素当然是有序的,将有序列表一个一个合并,最终合并成一个有序的列表。 ? 直接上码啦~ ? 函数调用

    55330发布于 2019-07-18
  • 来自专栏一英里广度一英寸深度的学习

    线性排序算法-归并排序3

    分治是优化算法中的重要思想。 归并排序的主要技巧,如何处理两个分别已经排好序的数组? 采用归并,生成排好序的(2) (2,2)采用归并,生成拍好序的(4) (4,4)-->(8) (8,8)-->16 def __Merge(self,a,l,mid,r): #排序对象 ) i = i+sz+sz sz = sz+sz 递归调用 def __MergeSort(self,a,l,r): #排序对象 a[l,r) if (l+1) >= r: return """ ## 在小数组情况下,用插入排序

    36020发布于 2018-09-12
  • 来自专栏惊羽-布壳儿

    算法练习(3) - 链表排序

    package top.buukle.buukle.排序类; public class 排序链表 { //给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 // // 进阶: // // // 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? // // // // // 示例 1: // // //输入:head = [4,2,1,3] //输出:[1,2,3,4] // // // 示例 2: // // //输入:head = [-1,5,3,4,0 ] //输出:[-1,0,3,4,5] // // // 示例 3: // // //输入:head = [] //输出:[] // // // // // 提示: // // // 链表中节点的数目在范围 [0, 5 * 104] 内 // -105 <= Node.val <= 105 // // Related Topics 排序 链表 // 1179 0 //leetcode submit

    32310编辑于 2022-06-15
  • 来自专栏明志德到的IT笔记

    C#排序算法3:插入排序

    插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。 原理:   ⒈ 从第一个元素开始,该元素可以认为已经被排序   ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描   ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置   ⒋ 重复步骤3 static void Main(string[] args) { Console.WriteLine($"数据算法"); var //var arr3 = SelectSort(arr1); //Console.WriteLine($"选择排序arr3:{ShowArray(arr3)}"); //var val = arr3[3]; var arr4= InsertSort(arr1); Console.WriteLine($"插入排序arr4

    37510编辑于 2023-10-21
  • 来自专栏编程乐园·

    排序3】选择排序:高效的排序算法之美

    选择排序 选择排序的基本思想: 每一趟(第i趟)在后面n-i+1(i=1,2,···,n-1)个待排序元素中 选取关键字最小的元素,作为有序子序列的第i个元素,直到n—1趟做完,待排序元素只剩下一个 1、直接选择排序 直接选择排序是一种简单直观的排序算法。 具体步骤】: 1、在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素 2、若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 3、 实际中很少使用 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定 2、堆排序排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 今天的分享就到这里了,后面还会分享更多排序算法,敬请关注喔!!!✌️

    38710编辑于 2024-01-30
  • 来自专栏python3

    Python3 基本排序算法之冒泡排序

      基本排序算法按时间复杂度分类   O(n^2)   冒泡排序   插入排序   选择排序   Q(n log n)   分而治之   快速排序   归并排序   冒泡排序   相邻的两个元素对比,大的数后推 简易版冒泡排序示例如下   def bubble(sl):   """   冒泡排序,O(n^2)   相邻的两个元素对比,大的后推,遍历整个列表一次后,将最大项以冒泡的方式排列到列表末尾   :param   def bubble_sort(items):   """   冒泡排序, 还是将while循环换为for循环比较习惯   最好 O(n)   最坏 O(n^2)   """   items_len True   items[j - 1], items[j] = items[j], items[j - 1]   if not has_swap:   break   return items   插入排序 def insert_sort_for(items):   """   插入排序,for循环, 中间还是使用while循环容易理解:   比插入的值 大的数挪后,直到不需要挪动为止即为插入的位置。   

    41920发布于 2020-01-03
  • 来自专栏CSDN搜“看,未来”

    通俗点聊聊算法 - 排序3)快速排序,亲测

    这些天做题的时候吃了不少 快速排序不熟的亏,我痛下决心,一定要自己写出快速排序的几种实现方法! 1、什么是快速排序 快速排序是很重要的算法,和傅里叶变化等算法并称二十世纪最伟大的十大算法。 快速排序的核心思维就是“分而治之”,就像封建王朝的“分封制”。将一大块“领土”,依据“嫡庶长幼”,分为不同部分,各个部分在自行细分,直到分无可分之后,便等级森严了。 3、元素的分配 3.1双边遍历 这个方法呢,如果对快慢指针和双指针不是很了解的朋友可以现在了解一下。 ? 首先啊,确定基准为4,左指针指向第一个元素,右指针指向尾巴。 ? ,left-1); doubleSideSort(vec1, right, keep_right); } int main() { vector<int> vec1 = { 4,6,8,7,9,3,1 keep_slow,slow-1); oneSideSort(vec1,slow+1, keep_hight); } int main() { vector<int> vec1 = {2,1,2,3}

    70810发布于 2020-08-26
  • 来自专栏小小码农一个。

    Python3 基本排序算法 之 冒泡排序,插入排序,选择排序

    冒泡排序 相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列i到列表末尾。 简易版冒泡排序示例如下 def bubble(sl): """ 冒泡排序,O(n^2) 相邻的两个元素对比,大的后推,遍历整个列表一次后,将最大项以冒泡的方式排列到列表末尾 (sl)): if sl[i] > sl[j]: sl[i], sl[j] = sl[j], sl[i] return sl 优化版冒泡排序示例如下 def bubble_sort(items): """ 冒泡排序, 还是将while循环换为for循环比较习惯 最好 O(n) 最坏 O(n^2) """ 1], items[j] = items[j], items[j - 1] if not has_swap: break return items 插入排序

    53810发布于 2020-06-08
  • 来自专栏xiaosen

    数据结构算法--3快速排序

    快速排序比冒泡排序,选择排序,插入排序速度都快 快速排序思路: ^取一个元素P,(第一个元素),使元素P归位。 ^列表被P分成了两部分,左边都比P小,右边都比P大。 ^递归完成排序。   所以left指针+1,left到了元素7,由于7>5,所以7要去列表右侧,所以right指针处(原来2的位置),变为7,依次类推,两指针交替变换 完成第一轮归位后,左侧和右侧再次分别进行归位,递归完成排序 如果是一个原本就逆序的数列要排成顺序数列,每一轮都只确定了基准元素的位置  这时最坏情况,时间复杂度退化成了O(n方) 我们可以避免这种最坏情况的发生,随机选择一个元素作为基准元素(不是第一个) 这样快速排序时间复杂度可以看出是

    21010编辑于 2024-03-15
  • 来自专栏算法工程师之路

    面试中的排序算法(Part 3

    今天来谈一种十分重要的堆排序算法,其在STL中的数据结构也就是Priority_Queue。 也是一种十分高效的排序方式,虽然其算法模型为二叉树结构,但是可以使用数据进行模拟这个二叉树的结构和相应的函数操作! 大根堆和小根堆 那么我们知道了堆的特性之后,我们就可以使用堆的结构对一个列表进行排序,通常为了编程和实现简单,我们会使用数组来模拟堆结构,假设原始数组为a={4,1,3,2,16,9,10,14,8,7 当我们得到了这两种堆的操作后,我们就可以完成我们的堆排序了,算法思路很简单,因为难得我们已经说过了! // 六、堆(大根堆)排序算法 void HeapSort(vector<int>& list) { if (list.size() < 2) { return; }

    73530发布于 2019-08-05
  • 来自专栏C/C++与音视频

    排序算法3----插入法

    先将第1个数 5看做是一个对,第2个数来插队。 5>4,4必需插的在5前面 j=0;

    40050编辑于 2022-06-14
  • 来自专栏技术博文

    算法-排序算法-选择排序

    /** * 排序算法-选择排序 * 选择排序(Selection Sort)算法也是比较简单的排序算法,其思路比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。 * 选择排序算法通过选择和交换来实现排序,其排序流程如下: * (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。 * (3)然后不断重复上述过程,直到最后两个数据完成交换。至此,便完成了对原始数组的从小到大的排序。 * * 选择排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步的中间排序。 * 这种排序方法思路很简单直观,但是缺点是执行的步骤稍长,效率不高。 size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组

    2K30发布于 2021-03-11
  • 来自专栏技术博文

    算法-排序算法-冒泡排序

    /** * 排序算法-冒泡排序 * 冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。 * 冒泡排序算法的思路就是交换排序,通过相邻数据的交换来达到排序的目的。 * 冒泡排序的思路: * (1)对数组中的各数据,依次比较相邻的两个元素的大小。 * (2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可将最小的数据排好。 * (3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组各数据。 * 冒泡排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行(i = n-1)次的外层循环。 * 每次内部的排序随着步骤的递增,需要排序的数据逐步减少,所以需要 (n - i)次的内层循环,注意:i从1开始 */ import java.util.*; public class BubbleSort

    1.3K20发布于 2021-03-08
  • 来自专栏技术博文

    算法-排序算法-快速排序

    /** * 排序算法-快速排序 * 快速排序(Quick Sort)算法和冒泡排序算法类似,都是基于交换排序思想的。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。 * 快速排序算法通过多次比较和交换来实现排序,过程如下: * (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 * (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 当左、右两部分各数据排序完成后,整个数组的排序也就完成了。 :" + Arrays.toString(ints)); quickSortFun(ints, 0, size - 1); System.out.println("排序后的数组

    1.3K10发布于 2021-03-17
  • 来自专栏技术博文

    算法-排序算法-希尔排序

    /** * 排序算法-希尔排序 * 冒泡排序算法、选择排序算法和插入排序算法,虽然思路比较直观,但是排序的效率比较低。 * 对于大量的数据需要排序时,往往需要寻求其他更为高效的排序算法。 Shell排序算法便是其中一种 * Shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序,思路如下: * (1)将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2 * (3)然后,再变为n/4个序列,再次排序。 * (4)不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。 size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组 :" + Arrays.toString(ints)); } System.out.println("排序后的数组:" + Arrays.toString(ints))

    99920发布于 2021-03-12
  • 来自专栏ACM算法日常

    基础算法系列之排序算法-3. 直接插入排序

    我们之前已经学习了冒泡排序和二分查找两种基本算法,本篇文章我们将一起学习下一个基础算法——直接插入排序算法。 ---- 直接插入排序算法思想 直接插入排序跟冒泡排序一样,是一种最简单的排序算法,其基本操作就是讲一个数插入到已经排好序的序列中,从而得到一个新的,元素数+1的序列,直到插入完最后一个数 public static void main(String[] args) { int[] a = new int[]{5,3,9,7,6,18,1,16,15}; straightInsertSort 是不是与我们预期的一样呢~既然我们已经学习了直接插入排序算法,老规矩,来做个题练练手吧。 ---- 总述 通过本次学习,我们又学会一种基础排序算法——直接插入排序算法,我们的算法水平又前进了一小步呢ヾ(◍°∇°◍)ノ゙

    94820发布于 2018-10-18
  • 来自专栏技术博文

    算法-排序算法-插入排序

    /** * 排序算法-插入排序 * 插入排序(Insertion Sort)算法通过对未排序的数据执行逐个插入至合适的位置而完成排序工作。 * 插入排序算法的思路比较简单,应用比较多。 * 插入排序算法通过比较和插入来实现排序,其排序流程如下: * (1)首先对数组的前两个数据进行从小到大的排序。 * (2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入合适的位置。 * (3)然后,将第4个数据插入已排好序的前3个数据中 * (4)不断重复上述过程,直到把最后一个数据插入合适的位置。最后,便完成了对原始数组从小到大的排序。 * * 插入排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步的中间排序。 * 这种排序方法思路简单直观,在数据已有一定顺序的情况下,排序效率较好。 但如果数据无规则,则需要移动大量的数据,其排序效率也不高。

    81420发布于 2021-03-11
  • 来自专栏全栈程序员必看

    Js排序算法_js 排序算法

    一、概念 快速排序算法由 C. A. R. Hoare 在 1960 年提出。 它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。 快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间 复杂度是O(n) ; 而整个快速排序算法的时间复杂度与划分的趟数有关。 稳定性: 不稳定性的含义:不稳定性是指在原始序列中相等的如果元素按照a1 a2 a3…的顺序排列时,排序之后相等元素的原相对位置改变,比如a3跑到a1前面去了。 举个例子就知道了。 JavaScript实现五种排序算法 关于快速排序的不稳定性说明 JavaScript实现十大排序算法(附有更好理解的GIF动态图) 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

    28.4K20编辑于 2022-09-28
  • 来自专栏用代码征服天下

    算法——排序算法

    8 3 7 5 6 最小数据2,把2放在首位,2原来就在首位,不需要交换 排序结果:2 8 3 7 5 6 ---------------------------------------------- --------- 第二趟排序: 原始数据:8 3 7 5 6(2已经排好序了,不需要再排序了) 最小数据3,8和3交换 排序结果:2 3 8 7 5 6 ----------------------- -------------------------------- 第三趟排序: 原始数据:8 7 5 6(2、3已经排好序了,不需要再排序了) 最小数据5,5和8交换 排序结果:2 3 5 7 8 6 6和7交换 排序结果:2 3 5 6 8 7 ------------------------------------------------------- 第五趟排序: 原始数据:8 7(2、3、5、 6已经排好序了,不需要再排序了) 最小数据7,7和8交换 排序结果:2 3 5 6 7 8 排序完成 代码示例: 1 package com.alibaba; 2 3 import org.junit.jupiter.api.Test

    91210编辑于 2022-05-09
  • 来自专栏JavaEE

    排序算法 --- 希尔排序

    ---- 案例: 假如有待排序列如下: 8 9 1 7 2 3 5 4 6 0 总共10个数,gap = 10 / 2 = 5,分成5组,并且不是两两相邻的为一组,arr[0]和arr [0 + gap]为一组,arr[1]和arr[1 + gap]为一组……第一次分组后的结果如下(数字后面带的符号相同的为同一组): 8* 9$ 1@ 7^ 2& 3* 5$ 4@ 6^ 0& 对这五组都进行插入排序,结果就是: 3* 5$ 1@ 6^ 0& 8* 9$ 4@ 7^ 2& 对上面的序列再进行分组 ,gap = gap / 2 = 5 / 2 = 2,再分成两组,arr[0]和arr[0+2]、arr[0+2+2]……为一组,分组结果就是: 3* 5$ 1* 6$ 0* 8$ 9* 4$ 7* 2$ 对这两组分别进行插入排序,结果就是: 0* 2$ 1* 4$ 3* 5$ 7* 6$ 8*

    75431发布于 2020-10-10
领券