归并排序算法

内部排序

直接插入排序算法

折半插入排序

希尔排序算法

冒泡排序算法

快速排序算法

简单选择排序算法

大端堆排序算法

外部排序

c 复制代码
int B[100]={0};
// 归并操作
void Merge(int A[], int low, int mid, int high){
    int i = low;
    int j= mid+1;
    int k;
    // 把子序列所有元素复制到B数组
    for (k = low; k <= high ; ++k) {
        B[k] = A[k];
    }
    for (k = low;  i<=mid && j<=high ; k++) {
        // 两个子序列相互比较,当一个序列的元素被安置完后
        // 另一个序列的剩余元素肯定是大于且有序的,直接顺序插入
        if(B[i] < B[j]){
            A[k] = B[i++];
        }else{
            A[k] = B[j++];
        }
    }
    // 如果一个表没有检测完,复制
    while (i <= mid){
        A[k++] = B[i++];
    }
    // 同理
    while (j <= high){
        A[k++] = B[j++];
    }
    // 注:只有一个while会执行
}
// 归并排序
void MergeSort(int A[], int low, int high){
    // 划分子序列,分到每个子序列长度为1
    if(low < high){
        int mid = (low+high) / 2;
        MergeSort(A, low, mid);
        MergeSort(A, mid+1, high);
        Merge(A, low, mid, high);
    }
}
int main() {
    int a[] = {0, 3, 4,6,8,5,7,9,2,1};
    int len = sizeof(a) / sizeof(a[0]);
    MergeSort(a, 0, len);
    for (int i = 0; i < len; ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

执行结果