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

    排序2

    我们在排序(1)中说到选择排序的代码: void SelectSort(int* a,int n) { int begin=0,end=n-1; int mini=begin,max=begin i=2,begin=1,end=6。 1随机数选key 2三数取中(把选中的数挪到最左边) int GetMid(int* a,int left,int right) { int mid=(left+right)/2; if(a 那么在这样一个数字较少的情况下,我们应该选择哪种排序呢?希尔排序的优势就是让大的数更快跳到后面,小的数更快跳到前面。 (a+left,right-left+1); } else { int mid=(left+right)/2; if(a[left]<a[mid]) {

    16610编辑于 2024-07-17
  • 来自专栏python3基础算法

    排序2:插入排序

    插入排序原理:通过构建有序序列,对于未排序的数据,在已排序的序列中从后向前比较,找到位置插入。 算法思想:第一个元素默认已排序取出第二个元素,从后向前扫描序列如果已排序的元素大于新元素,将两者互换重复步骤3,直到找到已排序元素<= 新元素将新元素插入重复2-5步骤代码实现:from typing import Listdef insert_sort(arr :List[int]): """ 插入排序 arr:待排序list return:就地排序,in-place

    27510编辑于 2022-08-09
  • 来自专栏C++打怪之路

    排序2:希尔排序(缩小增量排序

    上一期,我们介绍了直接插入排序。 这一期,我们来介绍希尔排序的底层逻辑和代码实现。 ---- 目录 希尔排序的基本思想 单趟的实现 整个排序的实现 总结 ---- 希尔排序的基本思想 先选定一个整数gap,把待排序文件中所有记录分成gap个 组,所有距离为gap的记录分在同一组内 分组排序后的结果:  然后,逐渐缩小gap进行排序,数据就会越来越有序。 2、每一组从后往前遍历排序。         3、与后面一个间隔为gap的数比较。         整个排序的实现 核心思想:         1、gap递减,缩小排序组数,最终到gap = 1的时候,就是一次直接插入排序了。         2、齐头并进。

    57020编辑于 2023-03-31
  • 来自专栏AngelNI

    排序算法-2

    排序,又简单,又快速,适合处理大量数据 桶排序 #include<iostream> using namespace std; int n ; int a[1000]; // O(m+n) int i<=n;++i) { int t; cin>>t; a[t]++; } //桶排序 { cout<<i<<" "; } } cout<<endl; } return 0; } 归并排序 i+1; ll c2 = 2*i+2; ll max = i; if(c1<n&&tree[c1]>tree[max]) { max = c1; } if(c2<n&&tree[c2]> tree[max]) { max = c2; } if(max !

    31510发布于 2020-04-14
  • 来自专栏一英里广度一英寸深度的学习

    线性排序算法-堆排序 (2)

    朴素思想是采用快速排序,选最小的。那么,出队复杂度O(1),入队复杂度二分查找O(logn)。但每次插入,都需要移动O(n)的元素。 self.heap[j] = tmp def swapUp(self,index): while(index>0): parent = (index-1)//2 else: break def swapDown(self,index): lchild = index*2+ self.swap(index,rchild) index = rchild lchild = index*2+ self.swap(index,lchild) index = lchild lchild = index*2+

    76730发布于 2018-09-12
  • 来自专栏分享/效率/工具/软件

    (2)交换排序之冒泡排序

    title: (2)交换排序之冒泡排序 date: 2019-02-10 13:00:00 +0800 update: 2019-02-10 13:00:00 +0800 author: me cover: http://ww1.sinaimg.cn/large/006jIRTegy1fzwiafdswej31jk0v9qp2.jpg preview: 冒泡排序是非常好理解的,以从小到大排序为例 tags: 算法 ---- 文章目录 (2)交换排序之冒泡排序 算法步骤 演示图 时间复杂度 空间复杂度 稳定性 Java代码实现 (1) 没有任何优化 (2) 对本身有排序的进行优化 (3) 部分有序 (2)交换排序之冒泡排序 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 static void main(String[] args) { System.out.println("冒泡排序-没有优化的"); int[] arr = {1,1,2,0,9,3,12,7,8,3,4,65,22

    69460发布于 2019-09-17
  • 来自专栏明志德到的IT笔记

    C# 排序算法2:选择排序

    每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,            2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。            3. .以此类推,直到全部待排序的数据元素排完。 int minValueIndex = i; //最小值的下标位置,初始设为第一个位置 for (int j = i+1; j < arr.Length; j++)// 2. :{ShowArray(arr1)}"); var arr2 = BubbleSort(arr1); Console.WriteLine($"冒泡排序:{ ShowArray(arr2)}"); var arr3= SelectSort(arr1); Console.WriteLine($"选择排序:{ShowArray

    39810编辑于 2023-10-21
  • 来自专栏余林丰

    2.比较排序之梳排序

      梳排序的知名度远没有其他排序算法那么高,它是在冒泡排序的基础上做的改进,引入类似“步长”以及“子序列”概念,这两个概念在后面的排序算法中会经常提及。    待排序列:{10, 2, 11, 8, 7} groupNums = length = 5   步长系数(分组系数)coefficient = 1.3   排序过程如下图所示。 ? ?   Java 1 package com.algorithm.sort; 2 3 import java.util.Arrays; 4 5 /** 6 * 梳排序 7 * Created 9 public class Comb { 10 public static void main(String[] args) { 11 int[] nums = {10, 2, 2 def comb_sort(nums): 3 cofficient = 1.3 #最佳系数 4 groupNums = len(nums) 5 flag

    1.4K80发布于 2018-01-12
  • 来自专栏algorithm4th

    2排序

    插入排序的改进,虽然说是改进,但相比插入排序有优有劣: 优点: 对于大规模乱序数组的排序时比插入排序快 缺点: 不再是稳定排序 分组: 将i,i+h,i+2_h,i+3h... 下列算法使用了递增(减)序列 1/2({3}^{k}-1) ,从N/3开始减至1。 The number of compares used by shellsort with the increments 1, 4, 13, 40, 121, 364, ... is O(N3/2). int hi) { if (hi <= lo) { return; } int mid = lo + (hi - lo) / 2; int hi) { if (hi <= lo) { return; } int mid = lo + (hi - lo) / 2;

    52520编辑于 2023-05-22
  • 来自专栏xiaosen

    数据结构算法--2 冒泡排序,选择排序,插入排序

      基础排序算法         冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序结束后,数列右侧的有序区有了两个元素.   由于该排序算法每一轮都要遍历所有元素,平均时间复杂度为O(n*n) def bubble_sort(li): for i in range(len(li)-1): # 第i趟 +1]=li[j+1],li[j] li=[random.randint(1,100) for i in range(20)] bubble_sort(li) print(li) 如果在某一趟排序中列表没有发生变化 min_loc=j # 目前的最小元素索引 li[i],li[min_loc]=li[min_loc],li[i] return li 插入排序

    24510编辑于 2024-03-15
  • 来自专栏编程乐园·

    排序2】交换排序:让代码更优雅

    2、冒泡排序 冒泡排序(Bubble Sort)是排序算法里面比较简单的一个排序。 】 冒泡排序是一种非常容易理解的排序 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:稳定 3、快速排序(挖坑法) 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为 2、分区:将数组中小于基准元素的元素放在基准元素的左边,大于基准元素的元素放在基准元素的右边,形成两个子数组。 3、递归排序:对基准元素左边的子数组和右边的子数组分别进行递归调用快速排序。 ,int left,int right) { int mid = left+((right-left) >> 1); //int mid = (left+right)/2; public static void insertSort2(int[] array,int start,int end) { for (int i = start+1; i <= end

    44410编辑于 2024-01-30
  • 来自专栏用户1175783的专栏

    # 归并排序2-路归并排序

    # 归并排序2-路归并排序) # 原理 将无序集合拆分成只有一个元素的有序集合,然后两两合并排序,直到合成一个包涵所有元素的有序集合。 合并排序: {5}{2}{4}{6}{8}{1}{9}{7}{10}{3}=>{5,2}{4,6}{8,1}{9,7}{10,3}=>{2,5}{4,6}{1,8}{7,9}{3,10} 再次合并: { 2,5}{4,6}{1,8}{7,9}{3,10}=>{2,5,4,6}{1,8,7,9}{3,10}=>{2,4,5,6}{1,7,8,9}{3,10} 再次合并: {2,4,5,6}{1,7,8,9 }{3,10}=>{2,4,5,6,1,7,8,9}{3,10}=>{1,2,4,5,6,7,8,9}{3,10} 最后合并: {1,2,4,5,6,7,8,9}{3,10}=>{1,2,4,5,6,7,8,9,3,10 groupCount一定为1,执行完此次排序排序结束,break跳出while循环借宿排序 if(groupCount==1): break # 就近两个集合的元素个数

    80420发布于 2019-09-10
  • 来自专栏目标检测和深度学习

    常用排序算法总结(2

    来源:SteveWang http://www.cnblogs.com/eniac12/p/5332117.html 上一篇总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序 例如:对0到99之间的数字进行排序,计数排序是最好的算法,然而计数排序并不适合按字母顺序排序人名,将计数排序用在基数排序算法中,能够更有效的排序数据范围很大的数组。 由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序并不是只能用于整数排序。 桶排序(Bucket Sort) 桶排序也叫箱排序。 数组 // 最差时间复杂度 ---- O(nlogn)或O(n^2),只有一个桶,取决于桶内排序方式 // 最优时间复杂度 ---- O(n),每个元素占一个桶 // 平均时间复杂度 ---- O(n) 桶排序不是比较排序,不受到O(nlogn)下限的影响,它是鸽巢排序的一种归纳结果,当所要排序的数组值分散均匀的时候,桶排序拥有线性的时间复杂度。

    55740发布于 2018-07-20
  • 来自专栏JavaPark

    2章 选择排序

    两种访问方式:随机访问和顺序访问; 顺序访问:从第一个元素开始逐个读取元素,链表只支持顺序访问; 随机访问:可以直接访问某一元素,速度很快,数组常用; 链表擅长插入和删除元素,而数组则擅长随机访问; 选择排序 : https://cunyu1943.github.io # @File : selectionSort.py # @Software: PyCharm # @Desc : 选择排序 List[i] < smallest: smallest = List[i] smallest_index = i return smallest_index # 选择排序 smallest)) return newList if __name__ == '__main__': List = [1, 9, 11, 43, 3, 7, 5] print("排序后的列表

    43230发布于 2019-11-14
  • 来自专栏算法解析

    牛客网题型总结(2)(排序算法1)(冒泡排序与快速排序

    *排序算法能够用来帮助我们完成一些排序的题,甚至有些题目就是让我们编写出实现某个排序算法的程序冒泡排序冒牌排序的原理就是让每个相邻的元素比较大小,如果不满足次序,就要将两者的顺序调换过来。 原理假设有十个元素需要排序,我们将这十个元素分为a1,a2……a10.,以升序的方式排列。a1~a10之间一定会有一个数是最大值,无论这个数在什么位置,他一定比两边的元素要大。 所以我们可以发现冒泡排序算法的排序原理1)将元素与右边的元素对比大小,符合排序要求就保留,不符合排序要求就交换2)将当前所有元素依次和右边元素进行对比,完成一次对比称为完成一轮冒泡排序。 (如果想要用快速排序实现逆序排序反之),原理快速排序的原理如下:将待分割的数据组的最低为称为low位,最高为为high位。 2)将数据分割成 low~i 和 i-high 。3)接着在 low到i 中找到“标准元素”4)在 i到high 中找到“标准元素5)再以"标准元素”的分割线,继续分割下去。

    23010编辑于 2024-06-08
  • 来自专栏积累沉淀

    必须掌握的八种排序(1-2)--插入排序,希尔排序

    1、 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。 (2)理解图: 已知待序的一组记录的初始排列为:21, 25, 49, 25*, 16, 08 ? 开始排序 ? ? 2、希尔排序(最小增量排序) (1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量 (d/2)对它进行分组,在每组中再进行直接插入排序。 当增量减到1时,进行直接插入排序后,排序完成。 (2)理解图 ?

    81270发布于 2018-01-11
  • 来自专栏周小末天天开心

    Java 数组、排序和查找(2

    目录 前言 一、数组反转 (1)方法一 (2)方法二 二、数组扩容 三、数组排序(冒泡法) 运行目标: ---- 前言 国庆第六天,继续努力复习。 arrNew[arrNew.length - 1] ,理解为将输入的数赋给 arrNew 数组的最后一个元素 5)因为用户什么时候退出不确定,所以使用使用 do - while 和 break 来控制 三、数组排序 (冒泡法)         排序是指将多个数据,按指定的顺序进行排列的过程。 冒泡排序法:通过比较两个相邻的数的大小(如果前面的数大于后面的数就进行交换 / 后面的数大于前面的数就进行交换 ),来进行一个数组的排序,使整个数组中的数据按  从小到大/从大到小  的顺序进行排序。 案例: 将五个无序的数:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。

    63510编辑于 2022-10-26
  • 来自专栏从零开始学自动化测试

    python笔记2-冒泡排序

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序。 一、基本原理 1.概念: 冒泡排序(Bubble Sort),是一种计算机领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 2.算法原理: 冒泡排序算法的运作如下:(从后往前) >比较相邻的元素。如果第一个比第二个大,就交换他们两个。 >对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 2.这里s是先计算li队列的长度,然后把range函数反转了,变成:[7, 6, 5, 4, 3, 2, 1, 0] ? 五、sort()排序 1.讲真,python里面排序不用这么麻烦,一个函数搞定:sort() ?

    82460发布于 2018-04-08
  • 来自专栏数据云团

    算法篇-python排序算法-2

    冒泡排序|插入排序|选择排序 回顾下写过的代码,理一理~ >冒泡排序 ? >插入排序 ? >选择排序 ? 接下来是快排啦,别刹不住车呀~稳着点开比较好 ? >快速排序 让指定的元素归位,就是放到它应该放的位置(左边元素比它小,右边元素比他大),然后对每个元素归位,完成排序。 有没有想到思路?

    66030发布于 2019-07-18
  • 来自专栏Lan小站

    试题 算法提高 成绩排序2

    资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   给出n个学生的成绩,将这些学生按成绩排序排序规则:总分高的在前;总分相同,数学成绩高的在前;总分与数学相同,英语高的在前;总分数学英语都相同 第一行一个正整数n,表示学生人数   接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩 输出格式   输出n行,每行表示一个学生的数学成绩、英语成绩、语文成绩、学号   按排序后的顺序输出 样例输入 2 1 2 3 2 3 4 样例输出 2 3 4 2 1 2 3 1 数据规模和约定   n≤100 import java.util.Scanner; public class 成绩排序 2 { public static class student { public int math; public int engilsh; public int chinese; public

    33510编辑于 2022-07-13
领券