冒泡排序与选择排序(C++实现)

冒泡排序与选择排序

最近有练习C++/C的时候,顺便在看排序的问题,就想到了大学时学习的冒泡排序与选择排序。下面简单的介绍下两种排序并总结下各自的优缺点。

冒泡排序

冒泡排序是计算机科学领域中一种常用且简单的排序方法,其排序的方法是重复遍历所有需要排序的数字,逐个相邻的两个元素相互比较,只要满足排序的大小条件,就相互交换两个元素,直到所有的元素满足排序要求。

选择排序

选择排序是一种非常直观的排序方法,其具体的思想是给定一组需要排序的数组,从该数组中选择一个最小(最大)的数字放在最前或者最后的位置,再从剩下的数字中选择一个最小(最大)的数字放在次前或者次后的位置,依次这样选择排序,直到所有的元素满足排序要求。

两种排序的区别与优缺点

区别
(1)冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
(2)冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
(3)冒泡排序是通过数去找位置,选择排序是给定位置去找数;

优缺点
冒泡排序:
优点: 比较简单,空间复杂度较低,是稳定的;
缺点: 时间复杂度太高,效率慢;

选择排序:
优点: 一轮比较只需要换一次位置;
缺点: 效率慢,不稳定(举个例子5,8,5,2,9 我们知道第一遍选择第一个元素5会和2交换,那么原序列中2个5的相对位置前后顺序就破坏了)。

代码

1、冒泡排序

// An highlighted block
#include <iostream>
#include <cmath>
using namespace std;
int i,j,len;
long arr[] = {12, 25, 546, 1, 235, 57, 47, 25, 253};
long k = 0;
void Bubble_Aort();
void Pri();

int main()
{   
    len = sizeof(arr)/sizeof(arr[0]);
    cout << "***Bubble Sort***" << endl;
    cout << "Array before sorting:" << endl;
    Pri();
    cout << "Sorted array:"<< endl;
    Bubble_Aort();
    Pri();
    cout << "Hello, world!" << endl;
    return 0;
}
void Bubble_Aort()
{
   for(i = 0; i < len; i++)
   {
     for(j = len-1; j > i; j--)
     {
       if(arr[j-1] > arr[j])
       {
          k = arr[j];
          arr[j] = arr[j-1];
          arr[j-1] = k;
        }
      }
   }
}
void Pri()
{
   for(i = 0; i < len; i++)
   {
      cout << arr[i] << " ";
   }
   cout << endl;
}

运行结果

// An highlighted block
***Bubble Sort***
Array before sorting:
12 25 546 1 235 57 47 25 253 
Sorted array:
1 12 25 25 47 57 235 253 546 
Hello, world!

2、选择排序

// An highlighted block
#include <iostream>
#include <cmath>
using namespace std;
int i,j,len;
long arr[] = {12, 25, 546, 1, 235, 57, 47, 25, 253};
long k = 0;
void Choose_Aort();
void Pri();

int main()
{   
    len = sizeof(arr)/sizeof(arr[0]);
    cout << "***Choose Sort***" << endl;
    cout << "Array before sorting:" << endl;
    Pri();
    cout << "Sorted array:"<< endl;
    Choose_Aort();
    Pri();
    cout << "Hello, world!" << endl;
    return 0;
}
void Choose_Aort()
{
   for(i=0;i<len;i++)
   {
      for(j=i;j<len;j++)
      {
         if(arr[i]>arr[j])
         {
            k=arr[j];
            arr[j]=arr[i];
            arr[i]=k;
          }
       }
   }
}
void Pri()
{
   for(i = 0; i < len; i++)
   {
      cout << arr[i] << " ";
   }
   cout << endl;
}

运行结果

// An highlighted block
***Choose Sort***
Array before sorting:
12 25 546 1 235 57 47 25 253 
Sorted array:
1 12 25 25 47 57 235 253 546 
Hello, world!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值