冒泡排序 & 选择排序 (C++)
2013-05-26 18:14
169 查看
冒泡排序和选择排序C++实现
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
选择排序的基本概念是:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
冒泡排序(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; }
相关文章推荐
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
- C/C++ 排序之一(冒泡排序、选择排序、交换排序)
- C++ 选择排序、冒泡排序、插入排序
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- C++三种排序,快速排序、选择排序、冒泡排序----简单代码
- C++各种常见排序算法 冒泡排序,插入排序,快排序,选择排序,希尔排序
- 排序算法的C++ && Python实现---选择排序
- C++中的冒泡排序,选择排序,插入排序
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- 选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序完整C++实现
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
- 冒泡排序 & 选择排序 & 折半查找
- C/C++ 排序之一(冒泡排序、选择排序、交换排序)
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 冒泡排序 & 选择排序 & 插入排序 & 希尔排序 JavaScript 实现
- c++:选择排序和冒泡排序