C语言三种排序方法

C语言三种排序方法

焦虑烧麦 60 2022-11-16

冒泡排序

冒泡原理:从左到右,相邻元素进行比较。
每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

  • 冒泡排序法的缺点是时间复杂度高,因为要对一组数据进行多次循环。
  • 优点是稳定性高,相同的两个元素进行比较不会互换位置,所以冒泡排序可以对任意一组数据排序。

原理

bubble-sort-animation2

代码

#include <stdio.h>
#define N 10
int main()
{
    int a[N], i, j, t;
    printf("Please enter the ten integer: \n");
    for (i = 0; i < N; i++)
    {
        /* 获取键盘输入的10个数 */
        scanf("%d", &a[i]);
    }
    // BubbleSort
    for (j = 0; j < 9; j++)
        for (i = 0; i < 9 - j; i++)
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
    printf("After BubbleSort:\n");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

插入排序

每一步将一个数插入一个已经排好的序列中,并使之保持有序。直到插完所有的数为止。

原理

1_5thWkuf8iTEUxyfBidVIug

代码

#include <stdio.h>
#define N 10
int main()
{
    int a[N], i, j, t;
    printf("Please enter the ten integer: \n");
    for (i = 0; i < N; ++i)
    {
        scanf("%d", &a[i]);
    }
    for (i = 1; i < N; ++i)
    {
        t = a[i];
        for (j = i - 1; j > -1 && a[j] > t; j--)
        {
            a[j + 1] = a[j];
        }
        a[j + 1] = t;
    }
    printf("After InsertSort:\n");
    for (i = 0; i < N; ++i)
    {
        printf("%d ", a[i]);
    }
    return 0;
}

选择排序

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

  • 缺点是此排序方法不稳定。

原理

SnappyMasculineAmericancicada-size_restricted

代码

#include <stdio.h>
#define N 10
int main()
{
    int i, j, min, tem, a[N];
    printf("Please Enter The 10 Number: \n");
    for (i = 0; i < N; i++)
    {
        /* 获取键盘输入的10个数 */
        scanf("%d", &a[i]);
    }
    //SelectionSort
    for (i = 0; i < N - 1; i++)
    {
        /* code */
        min = i;
        for (j = i + 1; j < N; j++)
        {
            /* code */
            if (a[min] > a[j])
            {
                /* code */
                min = j;
            }
            tem = a[i];
            a[i] = a[min];
            a[min] = tem;
        }
        printf("After SelectionSort: \n");
        for (i = 0; i < N; i++)
        {
            /* code */
            printf("%d ", a[i]);
        }
        printf("\n");
        return 0;
    }
}