排序算法总结
- 排序1. 冒泡排序
- 排序2. 选择排序
- 排序3. 插入排序
- 排序4. 希尔排序
- 排序6. 归并排序
- 排序7. 堆排序
- 排序8. 桶排序
(未完待续,欢迎讨论)
盗图一张:
一、冒泡排序 稳定排序
复杂度: 时间O(n^2).空间O(n)
主要思路:每次从左到右两两比较,把大的交换到后面,
每次可以确保将前M个元素的最大值移动到最右边。
算法步骤
1.从左开始比较相邻的两个元素x和y,如果 x > y 就交换两者
2.执行比较和交换,直到到达数组的最后一个元素
3.重复执行1和2,直到执行n次,也就是n个最大元素都排到了最后
1.1 理解版
void bubble_sort1(vector<int> &a)
{ //从前向后,最重的沉下去
for(int i=a.size()-1; i>0; i--) //控制下一个排序的终值位置
{ //每次从头开始,到第i个位置结束,向后比较
for(int j=0; j<i; j++)
{
int temp;
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
1.2 记忆版
void bubble_sort2(vector<int> &a)
{
for(int i=0; i<a.size()-1; i++) //次数
{
for(int j=0; j<a.size()-1-i; j++) //位置
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
补充:不使用中间变量的交换方法
a[j]+=a[j+1];
a[j+1]=a