0
点赞
收藏
分享

微信扫一扫

【网络安全的神秘世界】Error:Archives directory /var/cache/apt/archives/partial is missing.

一点读书 2024-07-24 阅读 29

       插入排序算法的大概实现思路是这样的,从数组第2个元素开始抽取元素,把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边,迭代处理整个数组 ,选择适当的位置插入。

        插入排序算的时间复杂度O(n2)  ,空间复杂度,O(1)  稳定排序。

       下面使用代码做简单演示


typedef  unsigned int  DataField;
/**
 *插入排序
*/
void  insert_sort(DataField* data, int len);

void   show_data(DataField* data,int len);
void  insert_sort(DataField* data, int len){
    int i = 1;
    for (i ; i < len ; i++)
    {
        /// 第一次遍历从第二个元素开始,默认第一个元素是排好序的
        ///  取出临时变量,临时变量左侧的为已经排好序的元素,右侧为待排序的
        DataField temp = *(data + i);
        int insertIndex = i-1;
        // 找到临时变量待插入的位置,用临时变量和左侧已经排好序的元素对比
        while (insertIndex>=0 && temp<*(data+insertIndex))
        {
             insertIndex--;
        }
        ///此时要插入的下标为 insertIndex +1 
        insertIndex  =  insertIndex +1;
        /// 遍历临时变量左侧之待插入区间,将临时变量插入
        int  j = i;
        for( j ; j > insertIndex ; j--){
           *(data+j) = *(data + j -1);
        }
        *(data+insertIndex) = temp;
    }
    show_data(data,len);
}

void show_data(DataField *data, int len)
{
    printf("-----------------\n");
    int i = 0;
    for (i; i < len; i++)
    {
        printf("%d\t",*(data+i));
    }
    printf("\n");
}

         测试结果

    void  (*funPtr)(DataField*,int);
    DataField arr[] ={ 19,29,49,69,99,39,9,79,89 };
    DataField* data = &arr[0];
    int len =  sizeof(arr)/sizeof(DataField);
    
    funPtr =  &insert_sort;
    (*funPtr)(data,len);

举报

相关推荐

0 条评论