排序算法(持续更新)

320 阅读1分钟

算法1:插入排序

//插入排序
//将key插入已排好序的数组a
//n表示已经排好序的元素个数
//key表示要新插入的元素
void insertArray(int a[], int n, int key)
{
    int i;
    for(i = n-1; i >= 0; i--)  //i为下标
    {
        if(key > a[i])
        {
            a[i+1] = key;
            break;
        }
        else
        {
            a[i+1] = a[i];
        }
    }
}

正式代码

#include <stdio.h>
#include <stdlib.h>

#define N 8

//插入排序
//将key插入已排好序的数组a
//n表示已经排好序的元素个数
//key表示要新插入的元素
void insertArray(int a[], int n, int key)
{
    int i;
    for(i = n-1; i >= 0; i--)  //i为下标
    {
        if(key > a[i])
        {
            a[i+1] = key;
            break;
        }
        else
        {
            a[i+1] = a[i];
        }
    }
}

//输出数组
void printArray(int a[], int n)
{
    int i;
    for(i = 0; i < n; i++)
        printf("%d ", a[i]);
    printf("\n");
}

int main()
{
    int a[N] = {1, 5, 6, 2, 3, 8, 4, 7};
    int i;

    for(i = 0; i < N; i++)
    {
        insertArray(a, i, a[i]);
    }

    printArray(a, N);
    return 0;
}

算法2:选择排序

//选择排序
void sort_select(int a[], int n)
{
    int i, j ,k, t;
    for(i = 0; i < n-1; i++)
    {
        k = i;
        for(j = i; j < n; j++)
            if(a[j] < a[k])
                k = j;
        if(k != i)
        {
            t = a[i];
            a[i] = a[k];
            a[k] = t;
        }
    }
}

正式代码

#include <stdio.h>
#include <stdlib.h>

//选择排序
void sort_select(int a[], int n)
{
    int i, j ,k, t;
    for(i = 0; i < n-1; i++)
    {
        k = i;
        for(j = i; j < n; j++)
            if(a[j] < a[k])
                k = j;
        if(k != i)
        {
            t = a[i];
            a[i] = a[k];
            a[k] = t;
        }
    }
}

int main()
{
    int a[10], i;
    for(i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    sort_select(a, 10);

    for(i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}

算法3:冒泡排序

//冒泡排序
void sort_bubble(int a[], int n)
{
    int i, j , t; //i表示冒泡排序的轮次
    for(i = 0; i < n-1; i++)
    {
        for(j = 0; j < n - i - 1; j++)
        {
            if(a[j] > a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
}

正式代码

#include <stdio.h>
#include <stdlib.h>

//冒泡排序
void sort_bubble(int a[], int n)
{
    int i, j , t; //i表示冒泡排序的轮次
    for(i = 0; i < n-1; i++)
    {
        for(j = 0; j < n - i - 1; j++)
        {
            if(a[j] > a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
}

int main()
{
    int a[10], i;
    for(i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    sort_bubble(a, 10);

    for(i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}