以下文章来源于小K算法 ,作者小K算法
曾就职华为和美团,中山大学数学与计算机系本科,专注分享数学、算法、科学等硬核知识
故事起源
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
}
}
}
for (int i = 0; i < n - 1; ++i) {
// flag标记是否有交换
bool flag = true;
for (int j = 0; j < n - i - 1; ++j) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
flag = false;
}
}
if (flag) {
break;
}
}
// 记录最后交换的位置
int position = 0;
int len = n - 1;
for (int i = 0; i < n - 1; ++i) {
// flag标记是否有交换
bool flag = true;
for (int j = 0; j < len; ++j) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
flag = false;
position = j;
}
}
len = position;
if (flag) {
break;
}
}
- EOF -
1、图解堆排序算法
看完本文有收获?请分享给更多人
推荐关注「Linux 爱好者」,提升Linux技能
点赞和在看就是最大的支持❤️