题目
本栏目是数据结构C语言版的十大排序算法,因为我只考常用的一些排序算法,所以会只更新一部分常用算法,每个排序分为算法思想,算法代码和执行结果三个部分展现。
更新第六篇:C语言实现冒泡排序
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692
一、算法思想
1.算法执行过程动图演示:
2.定义:
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
3.算法思想:
比较相邻的元素。如果第一个比第二个大,就交换它们两个;
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
4.我的总结:
1,从最后一个元素开始两两对比,小的数应该在这两个数的最左边
2,一趟走完后,最小的那个数就冒到了最左边
3,如此往复,之前已冒泡到左边的元素不用参与对比,最多进行n-1趟,数组就有序了。
稳定性为:稳定
>时间复杂度为:
好的情况:O(n)
坏的情况:O(n^2)
>空间复杂度为: O(1)
5.学习笔记:
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
void sort(int a[], int n)
{
for (int i = 0; i < n - 1; i++)//原则上要进行n-1趟排序
{
int f = 0;//用于做标识
for(int j=n-1;j>i;j--)//从最后一个到i遍历
if (a[j - 1] > a[j])//左边大于右边时交换
{
int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp;
f = 1;
}
if (f == 0)break;//如果本趟排序未发送交换,说明表已有序
}
}
void main()
{
int a[] = { 1,4,7,3,6,9,2,5,8 };
int n = sizeof(a) / sizeof(int);
sort(a, n);
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
}
三、执行结果
输入:
a[] = { 1,4,7,3,6,9,2,5,8 };
输出:
1 2 3 4 5 6 7 8 9