这一次直播是闲话最少的,之前的直播有好久都是在推销课程
quick sort 是leetcode 912
我一直有个困惑,就是时间复杂度上,函数调用,判断什么的,都是O(1),但是具体是多少呢,底层是怎么实现的呢,希望有好心能给我贴个链接哈~
目录
insert sort
先插一个insert sort, 这里讲解一下无监督优化
#define swap(a, b) { \
__typeof(a) __c = a; \
a = b, b = __c; \
}
void insert_sort(int *arr, int l, int r) {
for (int i = l + 1; i <= r; i++) {
int j = i;
while (j > l && arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
j--;
}
}
return ;
}
//下面这个是无监督
void unguarded_insert_sort(int *arr, int l, int r) {
int ind = l;
// 找出最小值的index
for (int i = l + 1; i <= r; i++) {
if (arr[i] < arr[ind]) ind = i;
}
//把最小值的index 放在第一个位置,船长说这样操作是为了程序的安全性或者规范还是什么的,我不太理解,不知道为什么不写个判断,直接交换(这是我的小困惑)
while (ind > l) {
swap(arr[ind], arr[ind - 1]);
ind--;
}
//下面这个就不需要每次都比较j,l了
for (int i = l + 2; i <= r; i++) {
int j = i;
while (arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
j--;
}
}
return ;
}
quicksort