C语言常见的排序算法

来源:互联网 发布:java兰陵王破解版 编辑:程序博客网 时间:2024/06/03 08:58

(1)直接插入排序

思路:将待插入的数与有序区的数从右到左依次比较。

#include <stdio.h>void insort(int s[], int n)/*自定义函数isort*/{    int i, j;    for (i = 2; i <= n; i++)/*数组下标从2开始,0做监视哨,1一个数据无可比性*/    {        s[0] = s[i];/*给监视哨赋值*/        j = i - 1;/*确定要进行比较的元素的最右边位置*/        while (s[0] < s[j])        {            s[j + 1] = s[j];/*数据右移*/            j--;/*移向左边一个未比较的数*/        }        s[j + 1] = s[0];/*在确定的位置插入s[i]*/    }}void main(){    int a[11], i;/*定义数组及变量为基本整型*/    printf("请输入10个数据:\n");    for (i = 1; i <= 10; i++)        scanf("%d", &a[i]);/*接收从键盘中输入的10个数据到数组a中*/    printf("原始顺序:\n");    for (i = 1; i < 11; i++)        printf("%5d", a[i]);/*将未排序前的顺序输出*/    insort(a, 10);/*调用自定义函数isort()*/    printf("\n插入数据排序后顺序:\n");    for (i = 1; i < 11; i++)        printf("%5d", a[i]);/*将排序后的数组输出*/    printf("\n");}

(2)希尔排序

#include <stdio.h>void shsort(int s[], int n)/*自定义函数shsort*/{    int i, j, d;    d = n / 2;/*确定固定增量值*/    while (d >= 1)    {        for (i = d + 1; i <= n; i++)/*数组下标从d+1开始进行直接插入排序*/        {            s[0] = s[i];/*设置监视哨*/            j = i - d;/*确定要进行比较的元素的最右边位置*/            while ((j > 0) && (s[0] < s[j]))            {                s[j + d] = s[j];/*数据右移*/                j = j - d;/*向左移d个位置*/            }            s[j + d] = s[0];/*在确定的位置插入s[i]*/        }        d = d / 2;/*增量变为原来的一半*/    }}void main(){    int a[11], i;/*定义数组及变量为基本整型*/    printf("请输入10个数据:\n");    for (i = 1; i <= 10; i++)        scanf("%d", &a[i]);/*从键盘中输入10个数据*/    shsort(a, 10);/*调用shsort()函数*/    printf("排序后的顺序是:\n");    for (i = 1; i <= 10; i++)        printf("%5d", a[i]);/*将排好序的数组输出*/printf("\n");}
(3)冒泡排序
#include <stdio.h>void main(){    int i, j, t, a[11];/*定义变量及数组为基本整型*/    printf("请输入10个数:\n");    for (i = 1; i < 11; i++)        scanf("%d", &a[i]);/*从键盘中输入10个数*/    for (i = 1; i < 10; i++)/*变量i代表比较的趟数*/        for (j = 1; j < 11-i; j++)/*变量j代表每趟两两比较的次数*/    if (a[j] > a[j + 1])    {        t = a[j];/*利用中间变量实现俩值互换*/        a[j] = a[j + 1];        a[j + 1] = t;    }    printf("排序后的顺序是:\n");    for (i = 1; i <= 10; i++)        printf("%5d", a[i]);/*将冒泡排序后的顺序输出*/    printf("\n");}



原创粉丝点击