C语言之冒泡排序、快速排序法、希尔排序法

简介: C语言之冒泡排序、快速排序法、希尔排序法

众所周知编程排序方法众多而且程序的好坏就取决于算法的使用

下面是博主现在会的几种排序方法希望对大家有所帮助。

希尔排序法:

/*
 * @Author: Stylle
 * @Date: 2020-11-14 15:52:03
 * @LastEditors: Stylle
 * @LastEditTime: 2020-11-14 15:52:16
 * @FilePath: \undefinedc:\Users\23999\Desktop\text.c
 */
#include <stdio.h>

void out(int s[]) //数组输出
{
    int y;
    for (y = 0; y < 10; y++)
    {
        printf(“% d”, s[y]);
    }
}
void main()
{
    int s[10] = {10, 9, 8, 6, 7, 5, 4, 3, 2, 1};
    int end = 9, start = 0;          //开始的下标和结束的下标
    int increment = end - start + 1; //长度
    int i = 0, temp = 0;
    do //进行判断长度是否大于1
    {
        increment = increment / 3;                 //
        for (i = start + increment; i <= end; i++) //参考插入法可理解
        {
            if (s[i - increment] > s[i])
            {
                temp = s[i];
                int j = i - increment;
                do
                {
                    s[j + increment] = s[j];
                    j -= increment;
                } while (j >= start && s[j] > temp);
                s[j + increment] = temp;
            }
        }
    } while (increment > 1);
    out(s);
}

冒泡排序

#include <stdio.h>

int main()
{
    int a[10];
    int i, n, c;
    printf(“请输入十个数:\n”);
    //循环输入模块
    for (i = 0; i < 10; i++)
        scanf(“% d”, &a[i]);
    //循环判断
    for (i = 0; i < 10; i++)
    {
        for (n = 0; n < 10; n++)
        {
            if (a[i] < a[n])
            {
                c = a[n];
                a[n] = a[i];
                a[i] = c;
            }
        }
    }
    //循环输出模块
    for (i = 0; i < 10; i++)
    {
        printf(“% d “, a[i]);
    }
    return 0;
}

快速排序法:

#include <stdio.h>

void sort(int s[], int left, int right) //进行排序
{
    if (left < right) //判断取的key两边的数组下标是否符合排序规则
    {
        int i = left, j = right;
        int key = s[left];
        while (i < j)
        {
            while (i < j && key <= s[j]) //寻找数组小于key的下标(从右到左)
                j–;
            s[i] = s[j];
            while (i < j && key >= s[i]) //寻找数组大于key的下标(从左到右)
                i++;
            s[j] = s[i];
        }
        s[i] = key;
        sort(s, left, i - 1);  //递归子表1,在key的左边的下标
        sort(s, i + 1, right); //递归子表2,在key的右边的下标
    }
}
void out(int s[]) //输出数组
{
    int i;
    for (i = 0; i < 10; i++)
    {
        printf(“% d”, s[i]);
    }
}
void main()
{
    int s[10] = {1, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    out(s);
    printf(“\n”);
    sort(s, 0, 9);
    out(s);
}

目录
打赏
0
0
0
0
6
分享
相关文章
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
74 4
|
4月前
|
【c语言】qsort函数及泛型冒泡排序的模拟实现
本文介绍了C语言中的`qsort`函数及其背后的回调函数概念。`qsort`函数用于对任意类型的数据进行排序,其核心在于通过函数指针调用用户自定义的比较函数。文章还详细讲解了如何实现一个泛型冒泡排序,包括比较函数、交换函数和排序函数的编写,并展示了完整的代码示例。最后,通过实际运行验证了排序的正确性,展示了泛型编程的优势。
48 0
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
C语言冒泡排序(附源码和动态图)
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素的值,如果它们的顺序错误(即满足一定的排序条件,如从小到大排序时前一个元素大于后一个元素),就交换它们的位置。这个过程就像水底的气泡一样逐渐向上冒,因此得名“冒泡排序”。
147 1
|
8月前
|
【C语言】: 快速排序——qsort函数的介绍
【C语言】: 快速排序——qsort函数的介绍
65 0
|
9月前
|
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
46 1
C语言探索:冒泡排序的实现与解读
C语言探索:冒泡排序的实现与解读
80 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等