排序算法之一: 基本的选择,插入,冒泡排序
来源:互联网 发布:python开发聊天机器人 编辑:程序博客网 时间:2024/05/18 00:01
三种排序入门级别算法。
#include "stdafx.h" #include <Windows.h> #include <iostream> // 打印数据 void ShowNums(int colNum, int totalNum, int *pData); // 创建随机数据 void ProduceRandomNum(int num, int range_min, int range_max, int* &pData); // 插入排序 void InsertionSort(int* &pData, int num); // 选择排序 void SelectionSort(int* &pData, int num); // 冒泡排序 void BubbleSort(int* &pData, int num); // 打乱排序 void Shuffle(int* &pData, int num, int seed); void SelectionSort(int* &pData, int num) { int minNum; int minNumNO; int temp; for (int i = 0; i < num - 1; i ++) { minNum = pData[i]; minNumNO = i; for (int j = i; j < num; j ++) { minNum = minNum <= pData[j] ? minNum : pData[j]; if (minNum == pData[j]) { minNumNO = j; } } temp = pData[i]; pData[i] = minNum; pData[minNumNO] = temp; } } void InsertionSort(int* &pData, int num) { int nCur; int nTmp; int nTmp2; bool bGet = false; for ( int i = 1; i < num; i ++) { nCur = pData[i]; bGet = false; for (int j = 0; j < i; j ++) { if (!bGet && nCur < pData[j]) { nTmp = pData[j]; pData[j] = nCur; bGet = true; } if (bGet == true) { nTmp2 = pData[j + 1]; pData[j + 1] = nTmp; nTmp = nTmp2; } } } } void BubbleSort(int* &pData, int num) { int nCur; int nNex; bool bNotChange = true; for (int i = 0; i < num; i ++) { bNotChange = true; for (int j = 1; j < num - i; j ++) { if (pData[j - 1] > pData[j]) { nNex = pData[j]; pData[j] = pData[j - 1]; pData[j - 1] = nNex; bNotChange = false; } } if (bNotChange) { break; } } } void Shuffle(int* &pData, int num, int seed) { srand(seed); int nTemp; for (int i = 0; i < num; i ++) { int j = (double) rand() / (RAND_MAX + 1) * num; nTemp = pData[j]; pData[j] = pData[i]; pData[i] = nTemp; } } void ShowNums(int colNum, int totalNum, int *pData) { std::string str; std::string strTmp; char cTmp[256]; for (int i = 0; i < totalNum; i ++) { sprintf(cTmp, "%d\t", pData[i]); strTmp = cTmp; str += strTmp; if ((i + 1) % colNum == 0) { str += "\n"; } } str += "\n"; std::cout<<str.c_str()<<std::endl; } void ProduceRandomNum(int num, int range_min, int range_max, int* &pData) { int n = GetTickCount(); srand(n); for (int i = 0; i < num; i ++) { pData[i] = (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min; } } int _tmain(int argc, _TCHAR* argv[]) { int nTotalNum = 5; int *pData = new int[nTotalNum]; ProduceRandomNum(nTotalNum, 0, 1000, pData); std::cout<<"原始数据:"<<std::endl; ShowNums(10, nTotalNum, pData); SelectionSort(pData, nTotalNum); std::cout<<"选择排序"<<std::endl; ShowNums(10, nTotalNum, pData); Shuffle(pData, nTotalNum, GetTickCount() + 1); std::cout<<"随机排序"<<std::endl; ShowNums(10, nTotalNum, pData); InsertionSort(pData, nTotalNum); std::cout<<"插入排序"<<std::endl; ShowNums(10, nTotalNum, pData); Shuffle(pData, nTotalNum, GetTickCount() + 2); std::cout<<"随机排序"<<std::endl; ShowNums(10, nTotalNum, pData); BubbleSort(pData, nTotalNum); std::cout<<"冒泡排序"<<std::endl; ShowNums(10, nTotalNum, pData); if (pData) { delete []pData; pData = NULL; } return 0; } //原始数据: //587 269 210 260 508 // //选择排序 //210 260 269 508 587 // //随机排序 //269 210 508 587 260 // //插入排序 //210 260 269 508 587 // //随机排序 //587 269 508 260 210 // //冒泡排序 //210 260 269 508 587 // //请按任意键继续. . .
- 排序算法之一: 基本的选择,插入,冒泡排序
- 基本排序算法(冒泡排序,选择排序,插入排序)
- 算法-基本排序:冒泡、选择、插入
- 基本排序算法(冒泡、选择、插入)
- 基本排序算法(冒泡、选择、插入)的效率比较
- 三种基本的排序算法:选择,插入,冒泡
- 三种最基本的排序 选择排序 插入排序 冒泡排序
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 面试最基本的三种排序算法 冒泡排序 插入排序 选择排序
- 基本排序算法(选择、插入、冒泡)和希尔排序
- 基本排序:选择 插入 冒泡
- 基本排序算法(选择,冒泡,一般插入,二分插入)源码
- 【算法】插入排序/冒泡排序/选择排序
- 《算法》选择排序、插入排序、冒泡排序
- 冒泡-选择-插入排序算法的实现
- 冒泡选择插入排序算法
- 选择-冒泡-插入排序算法
- android手势操作滑动效果触摸屏事件处理 .
- Android中如何修改系统时间(应用程序获得系统权限)
- 关于php-fpm占用系统资源分析
- c实现的指数曲线拟合代码
- 面向对象
- 排序算法之一: 基本的选择,插入,冒泡排序
- TOMCAT目录结构详解【5.0系列】
- Facebook SDK(iOS)初学讲解
- 让c更有效率
- YCbCr与YUV的区别
- net_PHP_网站开发方案
- 小遇 ATL
- Walkthrough: Using MSBuild to Create a Visual C++ Project 利用MSBuild创建Visual C++ 工程
- linux ls -l 命令 详解