您的位置:首页 > 编程语言 > C语言/C++

冒泡排序 & 选择排序 (C++)

2013-05-26 18:14 169 查看
冒泡排序和选择排序C++实现

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

选择排序的基本概念是:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐