插入排序 Insertion Sort

从新元素开始,从后向前扫描直到扫描到的元素小于等于新元素

则将新元素插入扫描到的元素前

代码实现

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int arr[8] = {5,6,1,7,5,3,1,4};
    for (int i = 1; i < 8;i++) {//从第二位开始遍历数组
        int j = i -1;
        int cur = arr[i];//储存当前数字
        while (j >= 0 && arr[j] >= cur) {//向前遍历
            arr[j+1] = arr[j];//将前面的数字向后移动一位
            j--;
        arr[j+1] = cur;//插入数字
        }
    }
    for (int i = 0; i < 8; i++) {//输出排好序的数组
        printf("%d",arr[i]);
    }
    system("pause");
}
  • 时间复杂度:O(n^2^)
  • 空间复杂度:O(1)

快速排序 Quick Sort

快排是一种分治(Divide and Conquer)算法,在这种算法
中,我们把大问题变成小问题,然后将小问题逐个解决,当
小问题解决完时,大问题也迎刃而解

步骤
1.对于当前的数组,取最后一个元素当做基准数 (pivot)
2.将所有比基准数小的元素排到基准数之前,比基准数大的排在基准数之后
3.当基准数被放到准确的位置之后,根据基数数的位置将数组切分为前后两个子数组
4对子数组采用步骤1~4的递归操作,直到子数组的长度小于等于1为止