首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

循环排序:为什么最外层的循环运行(n-1)次

循环排序是一种常见的排序算法,其目的是将一个数组或列表中的元素按照一定的顺序进行排列。在循环排序中,最外层的循环运行(n-1)次的原因是为了确保所有的元素都能够被正确地排序。

循环排序的基本思想是通过比较相邻的元素并交换它们的位置,从而逐步将最大(或最小)的元素移动到数组的末尾。每一次循环都会将当前未排序部分的最大(或最小)元素放置到正确的位置上,因此最外层的循环需要运行(n-1)次,其中n表示数组或列表的长度。

在每一次循环中,内层的循环会比较相邻的两个元素,并根据排序的要求进行交换。通过这种方式,每一次循环都会将当前未排序部分的最大(或最小)元素移动到正确的位置上,同时减少了未排序部分的长度。因此,最外层的循环需要运行(n-1)次,以确保所有的元素都能够被正确地排序。

循环排序的优势在于其简单易实现,适用于小规模的数据集。然而,对于大规模的数据集,循环排序的效率相对较低,因为其时间复杂度为O(n^2)。在实际应用中,可以考虑使用其他更高效的排序算法,如快速排序、归并排序等。

对于循环排序的应用场景,可以包括但不限于以下几个方面:

  1. 小规模数据集的排序:循环排序适用于小规模的数据集,例如对几十个或几百个元素进行排序。
  2. 教学和学习用途:循环排序是一种简单易懂的排序算法,常用于教学和学习排序算法的基本原理和思想。
  3. 排序算法的比较和分析:循环排序可以作为其他排序算法的对比基准,用于评估其他排序算法的性能和效率。

腾讯云提供了多种与云计算相关的产品和服务,其中包括与排序算法相关的计算和存储服务。具体推荐的产品和产品介绍链接地址如下:

  1. 云服务器(ECS):提供弹性计算能力,可用于执行排序算法等计算任务。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库(CDB):提供高性能、可扩展的数据库服务,可用于存储排序算法中的数据。详情请参考:https://cloud.tencent.com/product/cdb
  3. 云函数(SCF):无服务器计算服务,可用于执行排序算法等计算任务。详情请参考:https://cloud.tencent.com/product/scf

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求和场景进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1.说说你不知道时间复杂度

那么外面多了一层for循环,这次要循环多少呢?(j * log2a) > 线性:O(n) 线性指就是O(n),也就是运行n。...外层循环执行n,内层循环也是n,所以最终执行n*n,所以时间复杂度是O(n^2) } } } 这里有两层循环外层循环执行n,内存循环也是n,所以代码...来找找它规律 /* * 外层循环i=n, 内层代码执行1 * 外层循环i=n-1,内层代码执行2...* 外层循环i=n-2,内层代码执行3 * 外层循环i=n-3,内层代码执行4 * 外层循环i...我们来分析一下: 外层循环i=n, 内层代码执行1 外层循环i=n-1,内层代码执行2 外层循环i=n-2,内层代码执行3 外层循环i=n-3,内层代码执行4 外层循环i=1,内层代码执行

42110

初级排序算法

太多库函数为我们实现了排序过程,其中算法可能也会比今天谈到排序算法高效多,简单调用,这种高效便为我们提供了服务,但今天我们为什么还要提及这些算法呢?...array[min] = array[i]; array[i] = temp; } } } for循环,确定了一个界限i。...但为之付出代价也是巨大,选择过程会花费很长时间(与其他排序算法相比)。为了找到最小元素,i之后元素会一个一个进行比较,从而选出最小元素。每一扫描也不会给下一扫描提供任何有用信息。...于是,对于选择排序来说,对一个大小为N有序序列和一个大小为N无序序列进行排序所花费时间是一样运行时间和输入无关。我们在以后文章中将会看到,其他算法更善于利用输入初始状态。...for循环,将i从0移动到N-1,并且保证array[i]左侧元素都已经有序,但每个元素可能并不是在最终位置(可能还会被array[i]之后元素插来插去)。

37030
  • Java数据结构和算法(三)——冒泡、选择、插入排序算法

    冒泡排序性能分析: 假设参与比较数组元素个数为 N,则第一轮排序N-1 次比较,第二轮有 N-2 ,如此类推,这种序列求和公式为:   (N-1)+(N-2)+...+1 = N*(N-1)...其实无论何时,只要看见一个循环嵌套在另一个循环中,我们都可以怀疑这个算法运行时间为 O(N2)级,外层循环执行 N ,内层循环对每一外层循环都执行N(或者几分之N)。...选择排序性能分析: 选择排序和冒泡排序执行了相同次数比较:N*(N-1)/2,但是至多只进行了N交换。   ...插入排序性能分析:   在第一轮排序中,它最多比较一,第二轮最多比较两,一类推,第N轮,最多比较N-1。因此有 1+2+3+...+N-1 = N*(N-1)/2。   ...一般不会选择冒泡排序,虽然冒泡排序书写是简单,但是平均性能是没有选择排序和插入排序。   选择排序把交换次数降低到最低,但是比较次数还是挺大

    1.1K81

    go语言十大排序算法总结

    选择排序 选择排序基本思想是对待排序记录序列进行n-1处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录位置已经是正确了。...为什么叫选择排序呢,估计就是这个原因,每次遍历一遍,选个最大或者最小出来。算法因此得名。...冒泡排序 冒泡排序方法是简单排序方法。这种方法基本思想是,将待排序元素看作是竖着排列“气泡”,较小元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。...算法时间复杂度是O(n ^2) 个人总结: 在处理第二循环边界问题上,防止数据越界。为了保证已经冒泡到顶端数据不被第二查询比较,需要在内层循环外层循环分别做限制。...外层循环用来控制比较次数,内层循环用来在每次遍历数组元素并作比较,所以外层需要靠内层结果作为次数限制,内层哪部分数据需要比较,需要外层纪录做动态变更。

    69950

    go语言十大排序算法总结

    选择排序 选择排序基本思想是对待排序记录序列进行n-1处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录位置已经是正确了。...为什么叫选择排序呢,估计就是这个原因,每次遍历一遍,选个最大或者最小出来。算法因此得名。...冒泡排序 冒泡排序方法是简单排序方法。这种方法基本思想是,将待排序元素看作是竖着排列“气泡”,较小元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。...算法时间复杂度是O(n ^2) 个人总结: 在处理第二循环边界问题上,防止数据越界。为了保证已经冒泡到顶端数据不被第二查询比较,需要在内层循环外层循环分别做限制。...外层循环用来控制比较次数,内层循环用来在每次遍历数组元素并作比较,所以外层需要靠内层结果作为次数限制,内层哪部分数据需要比较,需要外层纪录做动态变更。

    75780

    排序算法之插入排序

    针对外部循环循环不定式为 在第一步循环每次迭代开始时,子数组A[0…i-1]包含初始元素A[0…i-1],但此时是已经排好序。 插入排序动图演示 ?...插入排序运行时间: 分析插入排序运行时间,我们发现它比选择排序更复杂,选择排序内层循环取决于外层循环索引而非元素值,而插入排序内层循环迭代次数取决于外层循环索引i和数组元素值。...当且仅当程序开始时,数组已经是有序,在这种情况下,外层迭代n-1,每次迭代花费常量时间,所以时间复杂度是O(N)。...外层循环每次迭代花费常量时间,迭代n-1,内层循环每次迭代也花费常量时间,迭代i-1。因此最坏情况下时间复杂度为O(n2)。 选择排序与插入排序优缺点: 当数组基本有序时,插入排序更好些。...选择排序优点在于每次移动次数是固定,而插入排序最坏情况下移动次数可能会达到n2。所以,如果无法确定插入排序输入是否接近于最好情况,最好运行选择排序

    39430

    排序算法】冒泡排序、选择排序、插入排序

    即对于内层循环: 在第i趟排序中,只需要比较n-i(i从1开始)。 如果外层循环是从0开始计数,那么需要每轮需要比较n-1-i。...---- 对于外层循环,在执行第n-1排序时,内层循环只比较了第1个元素和第2个元素。 此时已经排列完成,不需要再执行下一趟排序。 即对于外层循环: 只需要排序n-1趟。...对于给定数组,n-1结果也是确定。因此无论外层循环计数器从几开始,需要比较次数都是n-1。 上面的例子比较简单,还有一种情况存在优化空间:在第n-1排序执行之前就已经排序完成。...Java中Boolean类型不能赋值为1或0,将对应1和0改为true和false即可。 总结 外层循环控制轮数,总共执行n-1轮。 内层循环控制每轮比较次数,第i轮比较n-i(i从1开始)。...,外层循环执行趟数都为n-1,n即元素个数。

    19330

    python用冒泡法排序_数组冒泡排序c语言函数

    循环,内层变量为i, 外层为j,在内层循环中不断比较相邻两个值(i, i+1)大小,如果i+1值大于i值,交换两者位置,每循环外层j增加1,等到j等于n-1时候,结束循环 第一看不懂很正常...,我们来分析一下 第一循环: j = 0, i~n-2 range(0, n-1) 第二循环: j = 1, i~n-3 range(0, n-1-1) 第三循环: j = 2, i~n-4 range...count,如果第一循环后count没有变化,就说明输入是有序序列,这时我们直接return退出循环,这时候时间复杂度为O(n) 扩展知识:冒泡排序还是一种稳定性算法,如果序列中出现两个相同时候...,n个数为n-1 for i in range(0,len(number)-1): #内循环控制每次排序对比次数,n个数对比n-1 for j in range(0,len(number)-1):...是1里面的代码循环直到把fish_records里最大数排在最后一位然后再运行2吗?也就是[8,7,2,3,6,1,1,18]。。。为什么1里不是[8,18,7,2,3,6,1,1]再运行2 ?

    1.1K10

    排序算法

    1:冒泡排序 --- 冒泡排序是的算法思路是将最小数值放在下标为0位置,将最大值放在mao.length-1位置 外层for循环开始计算层数,即mao.length-1为目标计划循环次数,当外层for...冒泡排序效率 在上面的例子结果中可以看出,7条数据情况下,第一趟循环比较了6,第二比较了5......,最后一比较一,公式为 (N-1)+(N-2)+(N-3)+...+1===N*(N-1)/==2==== 比较算法结果: 学过高数的人都知道,数学中有叫趋向于某某某说法,咱们算法比较结果就是趋向于...在平常代码中,如果那你看到双重for循环时,基本就可以判断运行时间效果为O(N²)了。...所以时间为N²/2 比较次数和交换次数 比较次数:N²/2 交换次数:最多N-1,最少0,取平均N/2 大O表示法 O(N²) 以上可看出选择排序是比冒泡排序快点

    75150

    【干货】史上最好排序和数据结构入门

    因为俩俩交换,需要n-1排序(比如10个数,需要9趟排序) 代码实现要点:两个for循环外层循环控制排序趟数,内层循环控制比较次数。每趟过后,比较次数都应该要减1 ?...当只有一个数时,则不需要选择了,因此需要n-1排序 代码实现要点:两个for循环外层循环控制排序趟数,内层循环找到当前趟数最大值,随后与当前趟数组最后一位元素交换 ?...当只有一个数时,则不需要插入了,因此需要n-1排序 代码实现:一个for循环内嵌一个while循环实现,外层for循环控制需要排序趟数,while循环找到合适插入位置(并且插入位置不能小于0)...将个位、十位、…分配到桶子上,每分配一就回收一 ? 递归 递归在算法里边用得非常非常多,排序算法快速排序和归并排序就需要用到递归(至少用递归来实现是方便)。...现在已经工作有一段时间了,为什么还来写基础算法和数据结构呢,原因有以下几个: 我是一个对排版有追求的人,如果早期关注我同学可能会发现,我GitHub、文章导航read.me会经常更换。

    56720

    C#中基础排序算法

    冒泡排序算法逻辑如下 : //添加到CArray类冒泡排序函数 public void BubbleSort() { int temp; //外层循环, 从最后一个元素开始,...然后, 将最小元素放置在第 0 个位置上, 接着再从第1 个位置开始重复以上操作, 一直到第N-1个元素完成这种选择排序后才终止. 。 在选择排序算法中使用了两层循环....外层循环从数组第一个元素移动到数组第N-1个元素, 而内层循环则从数组第二个元素移动到数组最后一个元素, 并且内循环遍历一遍之后, 就会把找到最小值赋值到本轮内循环开始索引位置上....外层循环会逐个遍历数组元素, 而内层循环则会把外层循环所选择元素与该元素在数组内上一个元素进行比较....如果外层循环选择元素小于内层循环选择元素, 那么数组元素都向右移以便为内层循环元素留出位置, 这就像前面例子描述那样. 现在就来看看选择排序是如何处理前面实例中用来排序数据集合.

    74520

    四种简单排序算法

    假设数组长度为n,外层循环控制变量i由1至n-1依次递进,用于选择当前处理哪条记录;里层循环控制变量j,初始值为i,并由i至1递减,与上一记录进行对比,决定将该元素插入到哪一个位置。...它也含有两层循环,假设数组长度为n,外层循环控制变量i由0到n-2递增,这个外层循环并不是处理某个记录,只是控制比较趟数,由0到n-2,一共比较n-1趟。为什么n个记录只需要比较n-1趟?...我们可以先看下简单两个数排序:比如4和3,我们只要比较一趟,就可以得出3、4。对于更多记录可以类推。 数组记录交换由里层循环来完成,控制变量j初始值为n-1(数组下标),一直递减到1。...我们来对它进行一个考察,按照这种排序方式,在进行完第一趟循环之后,最小一定位于数组顶部(下标为0);第二趟循环之后,记录位于数组第二(下标为1)位置;依次类推,第n-1循环之后,第n-1记录位于数组第...选择排序思路是:对于第一趟,搜索整个数组,寻找出最小,然后放置在数组0号位置;对于第二趟,搜索数组n-1个记录,寻找出最小(对于整个数组来说则是),然后放置到数组第1号位置。

    61220

    《算法日记-玩出新花样》- 两数求和三种解法

    ,你会发现它们区别主要是在第二层 for (int j = i + 1; j < nums.length; j++) 中,**这个含义主要是:每轮都将外层之前比较过元素筛选出去,不再进行重复比较...比如要循环一个数组【1、2、11、7】找出和为9两个元素下标,我们会进行如下操作:   1、第一轮循环外层会使用【1】和内层中【2,、11、7】做运算,但没找有符合条件两个元素,继续循环。...2、第二外层循环拿2和内层中【11,7】做元素,得到符合条件结果,如果没有,则以此类推继续进行第三轮、第四轮...操作。   ...1、n-2,n-3...等等,你是不是已经发现,内层循环比较次数就是一个等差数列,公差为1**(注:如果对等差数列不是很熟悉同学,可以直接百度下,几分钟就能掌握)   通过等差数列求和方式...:Sn=na1+n(n-1)d/2,我们可以得到耗费运行时间函数f(n) = na1+n(n-1)d/2,再根据大O记法推断,可以得出优化后方法时间复杂度为O(n^2)。

    38230

    数据结构|冒泡排序与选择排序

    冒泡排序 排序算法可以说是算法中使用比较频繁,冒泡排序是一种简单排序,它通过遍历,一比较两个元素,如果排序错误就交换位置,遍历需要重复进行直到不再需要交换,才算排序完成。...第一层(内层循环):每次将相邻两个元素进行对比,使最大值移动到列表尾部 第二层(外层循环):第一层循环,第一执行只能保证最后一位元素位置正确,第二保证倒数第二位位置正确,以此类推,需要执行N-...1第一层循环,这就需要一个外层循环来实现。...随着元素个数变化,外层循环和内存循环次数都在变化,我们就需要将外层循环和内存循环循环次数联系在一起。...外层循环执行次数外层循环内层循环第一J=0需要执行n-1第二J=1需要执行n-1-1第三J=2需要执行n-1-2。。。。。。 ?

    51820

    排序算法】八大排序(上)(c语言实现)(附源码)

    ++)//每一趟排序使一个元素就位,n个元素数组需要n-1排序(最后一趟会使前两个元素就位) { //内层循环控制需要比较相邻元素 for (int j = 0; j < n - 1 -.../每一趟排序使一个元素就位,n个元素数组需要n-1排序(最后一趟会使前两个元素就位) { int flag = 1;//假设数组已经有序 //内层循环控制需要比较相邻元素 for.../将最小值与遍历部分首元素交换 } } 运行测试: 选择排序特性总结 空间复杂度:O(1) 时间复杂度:O(N^2) 稳定性:不稳定 使用寻找值进行交换方式,虽然在效率上相比冒泡排序有所提升...n-1排序(最后一趟会使前两个元素就位) { int flag = 1;//假设数组已经有序 //内层循环控制需要比较相邻元素 for (int j = 0; j < n - 1 -...,直接退出循环 { break; } } } //选择排序 void SelectSort(int* arr, int n) { //外层循环控制遍历次数以及遍历起始位置 for

    15510

    小算法大智慧之排序(一)

    我们可以总结下,N个数字要排序完成,总共进行N-1排序,第i趟排序次数为(N-i),所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟循环次数。...2.第二从第二数个开始,遍历N-1个数,找出最小数与第二个数交换。 如此循环...... 3.直到进行第N-1遍历,比较最后2个数,判断是否要交换。排序完成。...第N-1排序,需要比较1; 比较次数=(N-1)+(N-2)+...+1=((1+ N-1)*(N-1))/2=N²/2 + N/2 所以时间复杂度为:O(N²) 三、区别 一、相同点 1.都有两层循环...,外层循环控制比较轮数,和数组元素个数有关。...内层循环控制需要参与比较元素个数,和外层循环轮数有关,最终比较次数是一样。 2.两种算法进行交换结构是相同

    59650

    选择排序

    选择排序 选择排序是冒泡排序升级版 基本原理 每次排序(互换位置)前,先从没排序数列里面选出最小值,然后再把选中最小值和目标值交换位置 比如,第一排序,所有元素(n)都是未排序,就在所有元素里选出最小值...,然后将这个最小值和第一个位置互换,然后第二在剩余元素(n-1)里先选出最小值(也就是全部元素(n)第二小值),然后把最小值和第而个值互换位置,......以此类推,知道找到第n-1个元素和n互换位置后...复杂度 最好复杂度O(n²) 最差复杂度O(n²) 因为选择排序是每次先找出一个值,然后再进行互换位置,虽然比较次数还是O(n²),但是交换次数由O(n²)减到O(n) 稳定性 稳定算法,所有相同元素相对位置都不变...- 1 - 0,即5 // 第二轮内层循环arr.length - 1 - 1,即4 // 第三轮内层循环arr.length - 1 - 2,即3 // 第四轮内层循环arr.length...(arr) { for (var j = 0; j < arr.length; j++) { // 记录最小值下标(且每次外层for循环重新修改查找范围(越来越小))

    31120

    我说我不会算法,阿里把我挂了。

    因为俩俩交换,需要n-1排序(比如10个数,需要9趟排序) 代码实现要点:两个for循环外层循环控制排序趟数,内层循环控制比较次数。...当只有一个数时,则不需要选择了,因此需要n-1排序 代码实现要点:两个for循环外层循环控制排序趟数,内层循环找到当前趟数最大值,随后与当前趟数组最后一位元素交换 插入排序 思路:将一个元素插入到已有序数组中...当只有一个数时,则不需要插入了,因此需要n-1排序 代码实现:一个for循环内嵌一个while循环实现,外层for循环控制需要排序趟数,while循环找到合适插入位置(并且插入位置不能小于0)...基数排序(桶排序) 思路:基数排序(桶排序):将数字切割成个、十、百、千位放入到不同桶子里,放一就按桶子顺序回收一,直至最大位数数字放完~那么该数组就有序了 代码实现:先找到数组最大值,然后根据最大值...将个位、十位、…分配到桶子上,每分配一就回收一 递归 递归在算法里边用得非常非常多,排序算法快速排序和归并排序就需要用到递归(至少用递归来实现是方便)。

    27720

    C语言中你必须知道几大排序算法

    外层for循环每轮选择循环体执行完毕后,i 下标的元素就是所有剩余元素中最小值。当for外层循环执行完毕后,排序完成,输出排序数组元素。...外层for循环用来表示排序轮数,内层for循环对当前某轮剩余未排序元素进行冒泡排序。...:完成排序 和 未完成排序 外层for循环用来表示排序轮数,内层for循环对当前某轮剩余未排序元素进行交换排序。...每轮排序都将当前未排序元素中最小值元素交换出来,放在已排序元素最后,当执行N-1轮之后,所有的元素都完成了排序。 当整个循环结束后,输出排序数组。...选择法排序 共需要进行n(n-1)/2比较,互相交换n-1 。选择法排序简单、容易实现,适用于数量较小排序,但它是不稳定排序算法,也就是说,对应有相同关键字记录,排序后可能会颠倒次序。

    81500

    【算法与数据结构】复杂度深度解析(超详解)

    O(n^2) 原因: BubbleSort采用冒泡排序算法,它有两个循环外层循环从n遍历到1,循环n,内层循环每次比较相邻元素,从1遍历到end-1,循环n-1到1,所以内层循环总时间复杂度是...Σ(n-1)+(n-2)+...+1 = n(n-1)/2 = O(n^ 2) ,外层循环n,内层循环每个都为O(n), 所以整体时间复杂度是外层循环次数乘内层循环时间复杂度,即O(n)×O(n)=O..."沉底",即升序排列, 数组长度为n排序,需要进行n-1轮比较才能完成排序,每一轮循环需要进行n-1元素比较,最坏情况下每次比较都需要交换元素,所以总共需要进行(n-1)+(n-2)+...+1 =...n(n-1)/2元素比较,每次元素比较和交换时间复杂度都是O(1),所以冒泡排序时间复杂度是O(n^2)。...时间复杂度分析需要更仔细:外层循环i从1到N,循环次数是O(N),内层循环j起始点是i,终止点是N,但是j步长是i,也就是j每次增加i,那么内层循环每次迭代次数大致是N/i,所以总体循环迭代次数可以表示为

    20110
    领券