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

C排序算法(一):冒泡排序

冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们的位置交换过来。走访数列重复地进行直到排序完成。...因为越大(小)的元素经过交换会慢慢”浮”到数列的顶端(尾端),就如同碳酸饮料中的气泡一样,故名“冒泡排序”。 算法原理 以从大到小降序排列为例。...C语言实现代码 #include #define N 10 int main(void) { int arr[N] = { 0,3,2,5,8,4,7,6,9,1 };//创建一个大小为...:\n", length); } //对于“冒泡排序算法的封装 void bubble_sort(int* arr) { int i = 0; int j = 0; int temp = 0;...”**的两个功能,但是我真的搞了一天哇,我太菜了……自闭中…… 算法优化   以对于3 2 0 1 4 5 6 7 8 9从大到小排序,经过一轮排序后会变成2 0 1 3 4 5 6 7 8 9

81920

排序算法c语言_哪种排序算法最快

一、排序算法系列目录说明 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 选择排序(Selection Sort) 快速排序(Quick...) 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。...每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。...N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。...代码实现(C实现) 假设数据分布在[0,100)之间,每个桶内部用链表表示,在数据入桶的同时插入排序。然后把各个桶中的数据合并。

2.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

冒泡排序算法C语言冒泡排序算法详解

冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。 冒泡排序的原理是:从左到右,相邻元素进行比较。...以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。...比如对下面这个序列进行从小到大排序: 90 21 132 -58 34 第一轮: 90 和 21比,90>21,则它们互换位置: 21 90 132 -58 34 90 和 132 比,90...因为冒泡排序有一个特点,这个程序是从小到大排序,所以第一轮排序以后,最大的数就会浮到最右面;第二轮排序以后,第二大的数会浮到倒数第二个位置;第三轮排序以后,第三大的数会浮到倒数第三个位置……也就是说,排序多少轮...,就有多少个数字已经按排序要求排好了,它们不需要再比较。

1.9K20

C#排序算法6:快速排序

快速排序C. A. R. Hoare在1960年提出。...它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列...原理:       1.从数列中挑出一个元素,称为 “基准”(pivot);       2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边...这个称为分区(partition)操作;        3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序; static int[] QuickSort...} 排序结果 static void Main(string[] args) { Console.WriteLine($"数据算法");

18520

C语言排序算法之冒泡排序

1.冒泡排序概念 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地交换相邻的元素,将较大的元素“冒泡”到数组的末尾。...2.冒泡排序图解 给定一个乱序数组7,1,9,5,2,6,4降序排列 首先要比较相邻两个元素的大小,然后如果满足前一个数大于后一个数则交换 第一趟 7>1,交换得1,7,9,5,2,6,4 第二次1,7,9,5,2,6,4...直到1,5,2,6,4,7,9 以此类推 直到六趟后整个数组变为 1,2,4,5,6,7,9 至此数组有序且降序 根据以上,我们不难发现,一个长度为n的数组,最多经过n-1趟后,数组有序 每一趟最多排序...7,1,9,5,2,6,4 }; int sz = sizeof(arr) / sizeof(arr[0]); bubblesort(arr, sz); printarr(arr, sz); } 运行结果 4.冒泡排序代码改进

37010

排序算法-选择堆排序(C语言)

1基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完 。...2 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素。...选择排序的单趟就是找出最大的值的下标maxi和最小值的下标mini,然后将最小值放在最左边,最大值放在最右边。...稳定性:不稳定 3 堆排序排序 (Heapsort) 是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是 通过堆来进行选择数据。...堆排序在前面的一篇文章中有详细介绍: http://t.csdnimg.cn/S4Yso 1. 堆排序使用堆来选数,效率就高了很多。 2.

10810

C语言】排序算法之选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。...首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。...选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。...选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。...j; for (i = 0 ; i < len - 1 ; i++) { int min = i; for (j = i + 1; j < len; j++) //走訪未排序的元素

2.3K10

C++ 经典排序算法

1.1.概述 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。...走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。...1.2.算法原理: 冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。...早了解和熟悉了排序过程后,我们发现,直接插入排序是一种稳定的原地排序算法。...所以在记录数较小、待排序序列基本有序情况下直接插入排序优于折半插入排序。此外,折半插入排序是不稳定的原地排序,实现起来也较复杂。 看了这么多比较经典的排序算法,有没有觉得算法真的是一个神奇的“道具”。

94820

C#快速排序算法

快速排序实现原理 快速排序(Quick Sort)是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。...将基准元素与相遇位置的元素进行交换,确保基准元素位于其最终的排序位置。 根据基准元素的位置,将数组分为两个子数组,并递归地对这两个子数组进行快速排序。...快速排序图解 递归的快速排序的代码示例     public class 快速排序算法     {         public static void Sort(int[] array, int low...:" + string.Join(", ", array));         }     } 总结 快速排序是一种高效的排序算法,它的优势在于平均时间复杂度为O(nlogn),在实际应用中通常表现出色...递归方式简洁易懂但对于大数据量的排序可能会出现栈溢出的问题,而使用栈模拟递归则可以解决这个问题。

21040

C#计数排序算法

前言 计数排序是一种非比较性的排序算法,适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数,然后根据元素的大小依次输出排序结果。...遍历待排序数组,将每个元素的出现次数记录在count数组中。 根据count数组和min值,得到每个元素在排序结果中的起始位置。 创建一个与待排序数组长度相同的临时数组temp,用于存储排序结果。...再次遍历待排序数组,根据count数组和min值确定每个元素在temp数组中的位置,并将其放入。 将temp数组中的元素复制回待排序数组,排序完成。...:" + string.Join(", ", array));         } 运行结果 总结 计数排序的时间复杂度为O(n+k),其中n为待排序数组的长度,k为最大值和最小值之差。...计数排序的优势在于对范围较小的整数排序时,速度较快且稳定,但受限于需要统计每个元素的出现次数,不适用于范围过大或包含负数的情况。

12010

C#希尔排序算法

前言 希尔排序简单的来说就是一种改进的插入排序算法,它通过将待排序的元素分成若干个子序列,然后对每个子序列进行插入排序,最终逐步缩小子序列的间隔,直到整个序列变得有序。...希尔排序的主要思想是通过插入排序的优势,减小逆序对的距离,从而提高排序效率。 希尔排序实现原理 首先要确定一个增量序列(初始间隔),将待排序序列分成多个子序列。...对每个子序列分别进行插入排序,即在子序列内部进行排序。 逐步减小增量,重复步骤2,直到增量为1,即完成最后一次插入排序排序完成。...希尔排序动态图解 希尔排序代码实现         public static void ShellSort(int[] array)         {             int arrLength..." + string.Join(", ", array));         } 运行结果 参考文章 排序算法图解:https://cloud.tencent.com/developer/article

13630

C#桶排序算法

前言 桶排序是一种线性时间复杂度的排序算法,它将待排序的数据分到有限数量的桶中,每个桶再进行单独排序,最后将所有桶中的数据按顺序依次取出,即可得到排序结果。...实现原理 首先根据待排序数据,确定需要的桶的数量。 遍历待排序数据,将每个数据放入对应的桶中。 对每个非空的桶进行排序,可以使用快速排序、插入排序等常用的排序算法。...将每个桶中的数据依次取出,即可得到排序结果。...:" + string.Join(", ", array));         } 运行结果 总结 桶排序是一种线性时间复杂度的排序算法,适用于待排序数据分布均匀的情况。...它通过将数据分到有限数量的桶中,再对每个桶单独进行排序,最后将桶中的数据按顺序组合起来,得到排序结果。桶排序的时间复杂度为O(n+k),其中n为待排序数据的数量,k为桶的数量。

14720

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

插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。...原理:   ⒈ 从第一个元素开始,该元素可以认为已经被排序   ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描   ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置   ⒋ 重复步骤3...,直到找到已排序的元素小于或者等于新元素的位置   ⒌ 将新元素插入到下一位置中   ⒍ 重复步骤2~5 static int[] InsertSort(int[] arr)...{ //插入排序是把无序列的数一个一个插入到有序的数 //1.先默认下标为0这个数已经是有序 for (int i = 1; i...static void Main(string[] args) { Console.WriteLine($"数据算法"); var

11110
领券