冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
选择排序的基本概念是:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
#include
<
stdio.h
>
#include < tchar.h >
#include < cstdlib >
#include < iostream >
#include < sys / timeb.h >
#include < ctime >
#include < climits >
#include < cassert >
using namespace std;
// 冒泡排序
void BubbleSort( int * arr, int len)
{
// 检测输入参数
assert(arr != NULL);
// 判断一轮检测是否有交换
bool change = true ;
// 有交换才继续排序
for ( int i = len - 1 ; i > 1 && change; -- i)
{
change = false ;
for ( int j = 0 ;j < i; ++ j)
{
if (arr[j] > arr[j + 1 ])
{
int tmp = arr[j];
arr[j] = arr[j + 1 ];
arr[j + 1 ] = tmp;
change = true ;
}
}
}
}
// 选择排序
void SelectionSort( int * arr, int len)
{
// 输入参数检测
assert(arr != NULL);
// 最小值所在值的下标
int min = 0 ;
// len个数,只需要进行len-1次选取就可以了,最后一个就是最大的值
for ( int i = 0 ; i < len - 1 ; ++ i)
{
// 第i个最小值下标
min = i;
// 选取最小值的下标(前面i个数据已经排好序了)
for ( int j = i + 1 ; j < len ; ++ j)
{
if (arr[j] < arr[min])
{
// 记录最小值的下标
min = j;
}
}
// 交换最小值到位置i
if (min != i)
{
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
}
int _tmain( int argc, _TCHAR * argv[])
{
int arrLen = 0 ;
cout << " please input the size of the array : " << endl;
cin >> arrLen;
int * arr = new int [arrLen];
int * arr2 = new int [arrLen];
for ( int i = 0 ;i < arrLen; ++ i)
{
arr[i] = rand() % 100 ;
arr2[i] = rand() % 100 ;
}
cout << " 冒泡排序原始的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr[i] << " " ;
}
BubbleSort(arr,arrLen);
cout << endl << " 冒泡排序的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr[i] << " " ;
}
cout << " 选择排序原始的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr2[i] << " " ;
}
SelectionSort(arr2,arrLen);
cout << endl << " 选择排序的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr2[i] << " " ;
}
system( " pause " );
return 0 ;
}
#include < tchar.h >
#include < cstdlib >
#include < iostream >
#include < sys / timeb.h >
#include < ctime >
#include < climits >
#include < cassert >
using namespace std;
// 冒泡排序
void BubbleSort( int * arr, int len)
{
// 检测输入参数
assert(arr != NULL);
// 判断一轮检测是否有交换
bool change = true ;
// 有交换才继续排序
for ( int i = len - 1 ; i > 1 && change; -- i)
{
change = false ;
for ( int j = 0 ;j < i; ++ j)
{
if (arr[j] > arr[j + 1 ])
{
int tmp = arr[j];
arr[j] = arr[j + 1 ];
arr[j + 1 ] = tmp;
change = true ;
}
}
}
}
// 选择排序
void SelectionSort( int * arr, int len)
{
// 输入参数检测
assert(arr != NULL);
// 最小值所在值的下标
int min = 0 ;
// len个数,只需要进行len-1次选取就可以了,最后一个就是最大的值
for ( int i = 0 ; i < len - 1 ; ++ i)
{
// 第i个最小值下标
min = i;
// 选取最小值的下标(前面i个数据已经排好序了)
for ( int j = i + 1 ; j < len ; ++ j)
{
if (arr[j] < arr[min])
{
// 记录最小值的下标
min = j;
}
}
// 交换最小值到位置i
if (min != i)
{
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
}
int _tmain( int argc, _TCHAR * argv[])
{
int arrLen = 0 ;
cout << " please input the size of the array : " << endl;
cin >> arrLen;
int * arr = new int [arrLen];
int * arr2 = new int [arrLen];
for ( int i = 0 ;i < arrLen; ++ i)
{
arr[i] = rand() % 100 ;
arr2[i] = rand() % 100 ;
}
cout << " 冒泡排序原始的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr[i] << " " ;
}
BubbleSort(arr,arrLen);
cout << endl << " 冒泡排序的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr[i] << " " ;
}
cout << " 选择排序原始的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr2[i] << " " ;
}
SelectionSort(arr2,arrLen);
cout << endl << " 选择排序的数组为: " ;
for ( int i = 0 ;i < arrLen; ++ i)
{
cout << arr2[i] << " " ;
}
system( " pause " );
return 0 ;
}