数据结构学习笔记-插入排序

插入排序的算法设计与分析

问题描述:设计并分析插入排序算法

【算法设计思想】

  1. 开始排序:假定第一个元素已经排序(实际上,单个元素可以视为已排序状态),因此排序开始于数组的第二个元素。
  2. 选择未排序的元素:从未排序的部分取出第一个元素,我们称之为key。这个key是待插入到已排序序列中的元素。
  3. 比较和插入
    • key与已排序部分的元素从后向前逐一比较。
    • 如果当前比较的已排序元素大于key,则将该元素向后移动一个位置,为key的插入腾出空间。
    • 重复这个过程,直到找到一个已排序的元素小于或等于key的位置,或者已排序部分比较完毕。
  4. 插入元素:在找到的适当位置插入key。此时,key成为已排序部分的一员。
  5. 重复过程:对数组中的每个未排序元素重复上述过程,直到整个数组排序完成。

【算法描述】

void insertionSort(int array[], int size) {
    int i, key, j;
    for (i = 1; i < size; i++) {
        key = array[i]; // 取出要插入的元素
        j = i - 1;

        // 将大于key的元素向后移动一个位置
        while (j >= 0 && array[j] > key) {
            array[j + 1] = array[j];
            j = j - 1;
        }
        array[j + 1] = key; // 插入key到正确的位置
    }
}

【完整的测试程序】

#include <stdio.h>

void insertionSort(int array[], int size) {
    int i, key, j;
    for (i = 1; i < size; i++) {
        key = array[i]; // 取出要插入的元素
        j = i - 1;

        // 将大于key的元素向后移动一个位置
        while (j >= 0 && array[j] > key) {
            array[j + 1] = array[j];
            j = j - 1;
        }
        array[j + 1] = key; // 插入key到正确的位置
    }
}

// 用于打印数组的函数
void printArray(int array[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
}

int main() {
    int array[] = {12, 11, 13, 5, 6};
    int size = sizeof(array) / sizeof(array[0]);

    printf("Original array: \n");
    printArray(array, size);

    insertionSort(array, size);

    printf("Sorted array: \n");
    printArray(array, size);

    return 0;
}
posted @   ShaneYale  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示