2.1 初级排序算法

2.1demo的C语言实现

/*
 * 实现数组从小到大顺序排列
 */
#include <stdio.h>
#include <stdlib.h>

#define less(a,b) (a<b)
#define exch(array, a, b) do {    \
    int tmp = array[a];            \
    array[a] = array[b];        \
    array[b] = tmp;                \
} while(0)

/*
 * 选择排序法
 */
void selectSort(int *array, int size)
{
    int i, j;

    for (i = 0; i < size; i++) {
        int min = i;
        for (j = i+1; j < size; j++) {
            if (less(array[j], array[min]))
                min = j;
        }
        exch(array, i, min);
    }
}
/*
 * 插入排序法
 */
void insertSort(int *array, int size)
{
    int i, j;

    for (i = 1; i < size; i++) {
        for (j = i; j>0 && less(array[j], array[j-1]); j--) {
            exch(array, (j-1), j);
        }
    }
}

void show(int *array, int size)
{
    int i;
    for (i = 0; i < size; i++) {
        printf("%d\n", array[i]);
    }

    printf("\n");
    return;
}

int isSorted(int *array, int size)
{
    int i;
    for (i = 1; i < size; i++)
        if (!less(array[i-1], array[i])) 
            return 0;

    return 1;
}


void init_array(int *array, int size)
{
    int i;
    for (i = 0; i < size; i++) {
        array[i] = random();
    }
    
}

#define DEFAULT_SIZE 20

int main()
{
    int *array = malloc(DEFAULT_SIZE*sizeof(int));

    init_array(array, DEFAULT_SIZE);
    show(array, DEFAULT_SIZE);
    selectSort(array, DEFAULT_SIZE);
    show(array, DEFAULT_SIZE);
    insertSort(array, DEFAULT_SIZE);
    show(array, DEFAULT_SIZE);

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/rivsidn/p/10778664.html
2.1