八大排序算法C++代码实现
喜欢文章的话可以收藏或者关注一下…
冒泡排序(从小到大)
相邻两个值比较大小,按照排序规则摆放,重复之前操作,下面代码:
void BubbleSort(vector<int>& nums)
{
for(int i=nums.size()-1;j>0;j--)
{
for(int j=0;j<i;j++)
{
if(nums[j]>nums[j+1])
{
swap(nums[j],nums[j+1]);//元素交换函数
}
}
}
}
以上为最基础的冒泡排序,由于存在最优时间复杂度和最差时间复杂度,所以可以进行简单的优化。
优化方法:
创建一个flag=false;标识,当内层循环发生了一次交换数据就把flag=true;当其中一趟冒泡排序走完之后检查此flag是否为true,未发生修改则直接跳出循环避免空循环没操作。
应用场景:
选择排序(从小到大)
最易于理解的排序,每次选出数组中最值放在相应位置,下面代码:
void SelectSort(vector<int>& nums)
{
int MinIndex=0;
for(int j=1;j<nums.size()-1;j++)
{
MinIndex=j;
for(int i=j;i<nums.size();i++)
{
if(nums[i]<nums[MinIndex])
{
MinIndex=i;
}
}
if(j!=MinIndex)
{
swap(nums[j],nums[i]);
}
}
}
插入排序(从小到大)
将数组分为已排和待排序列,例如:0, 5,6,4,2,3 我们最开始认为0为已排序,然后从5开始向已排查询,寻找到合适位置插入。
void InsertSort(vector<int>& nums){
for (int i = 1; i < nums.size(); i++){
int j = i - 1;//未排序部分
int tmp = nums[i];//待排数
while (j>=0 && tmp<nums[j]){
//不越界且大于待排数
nums[j+1] = nums[j];//向后移
j--;
}
nums[j+