插入排序 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为止
Comments