C语言笔试题(17)——三种常见的排序

来源:互联网 发布:java浮点数精度丢失 编辑:程序博客网 时间:2024/06/10 03:34

1、直接插入排序

#include <stdio.h>#include <stdlib.h>void insert_sort(int a[], int n){    int i, j;    for (i = 2; i < n; i++)    //第二个纪录开始插入n - 1趟       {        a[0] = a[i];   //设置监视哨        j = i - 1;        while(a[0] < a[j])           {            a[j + 1] = a[j];   //后移一个位置            j--;        }        a[j + 1] = a[0];    }    return ;}int main(int argc, const char *argv[]){    int i;    int a[11] = {0, 2, 5, 1, 56, 34, 23, 67, 52, 68, 102};    for (i = 1; i < 11; i++)        printf("%d ", a[i]);    printf("\n");        insert_sort(a, 11);    for (i = 1; i < 11; i++)        printf("%d ", a[i]);    printf("\n");    return 0;}

2、冒泡排序

#include <stdio.h>void sort(int a[], int n){    int i, j;    int temp, flag;;    for (i = 1; i < n; i++)    //n - 1趟    {        flag = 0;       //交换标志        for (j = n -1; j >= i; j--)        {            if (a[j] < a[j - 1])            {                temp = a[j];                a[j] = a[j - 1];                a[j - 1] = temp;                flag = 1;            }        }        if (flag == 0)            break;    }    return ;}int main(int argc, const char *argv[]){    int i;    int a[10] = {99, 4, 5, 23, 12, 56, 35, 57, 98, 45};    sort(a, 10);    for (i = 0; i < 10; i++)        printf("%d ", a[i]);    printf("\n");    return 0;}

3、直接选择排序

#include <stdio.h>void select_sort(int a[], int n){    int i, j, m;    int temp;    for (i = 0; i < n - 1; i++)   //n - 1趟    {        m = i;        //筛选出最小的数        for (j = i + 1; j < n; j++)           {            if (a[j] < a[m])                m = j;        }        if (m != i)        {            temp = a[i];            a[i] = a[m];            a[m] = temp;        }    }    return ;}int main(int argc, const char *argv[]){    int i;    int a[] = {43, 23, 45, 56, 21, 67, 4, 2, 64, 25};    select_sort(a, 10);    for (i = 0; i < 10; i++)        printf("%d ", a[i]);    printf("\n");    return 0;}