排序是任何编程语言中我们都需要学习的必要概念。大多数排序是在涉及数字的数组上完成的,是掌握遍历和访问数组中数据的技术的垫脚石。
我们在今天的文章中要讨论的排序技术类型是冒泡排序。
冒泡排序是一种简单的排序算法,如果相邻元素的顺序错误,它的工作原理是重复交换相邻元素。这种数组排序方法不适合大型数据集,因为平均和最坏情况情况下的时间复杂度非常高。
冒泡排序算法:- 冒泡排序通过多次排序来组织数组。
- 第一遍:最大的元素移动到最后一个位置,它的正确位置。
- 第二遍:第二大元素移动到倒数第二个位置,并继续进行后续遍。
- 每次传递时,仅处理数组中未排序的部分。
- 经过 k 遍后,最大的 k 个元素在最后 k 个槽位中处于正确的位置。
- 在每次传递期间:
- 比较未排序部分中的相邻元素。
- 如果较大的元素出现在较小的元素之前,则交换元素。
- 在遍历结束时,最大的未排序元素移动到正确的位置。 重复此过程,直到整个数组排序完毕。
下面是冒泡排序的实现。如果内部循环没有引起任何交换,可以通过停止算法来优化它。
// Easy implementation of Bubble sort #include <stdio.h> int main(){ int i, j, size, temp, count=0, a[100]; //Asking the user for size of array printf("Enter the size of array you want to enter = "); scanf("%d", &size); //taking the input array through loop for (i=0;i<size;i++){ printf("Enter the %dth element",i); scanf("%d",&a[i]); } //printing the unsorted list printf("The list you entered is : "); for (i=0;i<size;i++){ printf("%d, ",a[i]); } //sorting the list for (i = 0; i < size - 1; i++) { count = 1; for (j = 0; j < size - i - 1; j++) { if (a[j] > a[j + 1]) { //swapping elements temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; count = 1; } } // If no two elements were swapped by inner loop, // then break if (count == 1) break; } // printing the sorted list printf(" The sorted list is : "); for (i=0;i<size;i++){ printf("%d, ",a[i]); } return 0; }输出 :
**
时间复杂度:o(n2)
辅助空间:o(1)
- 冒泡排序很容易理解和实现。
- 不需要任何额外的内存空间。
- 它是一种稳定的排序算法,这意味着具有相同键值的元素在排序输出中保持其相对顺序。
- 冒泡排序的时间复杂度为 o(n2),这使得它对于大型数据集来说非常慢。
- 冒泡排序是一种基于比较的排序算法,这意味着它需要比较运算符来确定输入数据集中元素的相对顺序。在某些情况下它会限制算法的效率。
有任何疑问请评论!!
所有讨论都将受到赞赏:)
以上就是C 中的冒泡排序的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论