几种常见排序算法的实现原理性能分析和c语言实现

时间:2019-11-27
本文章向大家介绍几种常见排序算法的实现原理性能分析和c语言实现,主要包括几种常见排序算法的实现原理性能分析和c语言实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

~~~~~~~~~~~~~~~~~还未完成发布点错了~~~~~~~~~~~~~

本文介绍8种常见的排序算法,以及他们的原理,性能分析和c语言实现:

为了方便比对,本文所有的排序全部是升序.

首先准备一个元素无序的数组,一个交换函数,在main函数中实现排序函数的调用,并输出排序结果:

void swap(int*x , int*y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}
int main() {
    int arr[] = { 1,8,5,7,4,6,2,3};
    int length = sizeof(arr) / sizeof(int);
    sort(arr, length);
    for (int i = 0;i < length;i++) {
        printf("%d\n", arr[i]);
    }
    return 0;
}

插入排序

第一次排序:

第二次排序:

第三次排序:

 外层循环每执行一次就从无序区向有序区中插入一个数据arr[i]

  里层循环控制插入的数据arr[i]与其前一个数据比较,如果比前一个数据小,就让前一个数据后移1位

  ...不断重复上述步骤,直到找到不比arr[i]小的数据arr[j],因为arr[j]后面的数据都后移了1位,所以直接将arr[i]放在空闲的arr[j+1]位置

c程序实现:

void CRsort(int arr[], int length) {
    int temp;
    for (int i = 0;i < length;i++) {
        temp = arr[i];
        for (int j = i - 1;j >= 0;j--) {
            if (arr[j] > temp) {
                arr[j + 1] = arr[j];
            }
            else {
                arr[j + 1] = temp;
                break;
            }
        }
    }
}

性能分析

稳定性 : 稳定             

  -->内层循环执行时,只有遇到大于arr[i]的才会后移,等于arr[i]的不会后移

时间复杂度 : (最坏n²,最好n次,平均n²)    

  -->数据为n的情况下,外层循环执行n次,内层循环最多执行n次,如果是数据是有序的内层循环只会执行1次,

空间复杂度: 1

参考资料:

1. 《新编数据结构习题与解析》

2. B站视频:https://space.bilibili.com/406692798/channel/detail?cid=67290

3. 博客园

https://www.cnblogs.com/jingmoxukong/p/4302891.html

https://www.cnblogs.com/skywang12345/p/3603935.html

文中的部分图片和设计思路来自以上材料

原文地址:https://www.cnblogs.com/iszhangk/p/11938782.html