冒泡排序与选择排序
最近有练习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!