选择排序
2016-05-19 23:11
141 查看
下面我介绍两种选择排序的方法: 一.选最小的或最大的(我以最小的为列) 这种方法的思路为: 1.在数组中选出最小的数值,放在a[0]位置。 2.选出次小的放在a[1]位置。 3.就这样一直选,直到排好数列。实现代码:
思路:
1.选出最大最小放在两边。
2.一直这样选,直到选完为止。
#include<assert.h> void SelectSort(int *arr, int size ) { assert(arr ); int min; for (int i = 0; i < size; i++) { min = i; //选出最小的数,把最小数的下标给成min for (int j = i + 1; j < size ; j++) { if (arr [j]< arr[min]) { min = j; } } //把最小的数放在i位置 int tmp = arr [i]; arr[i] = arr [min]; arr[min] = tmp; } } void Print(int *arr, int size ) { for (int i = 0; i < size; i++) { cout << arr[i] << " " ; } cout << endl; }test.cpp
#include<iostream> using namespace std; #include "Sort.h" void Test() { int arr[] = { 3, 9, 7, 6, 1, 2, 4, 8, 0, 5 }; SelectSort(arr, sizeof(arr) / sizeof(arr[0])); Print(arr, sizeof(arr) / sizeof(arr[0])); } int main() { Test(); system("pause"); return 0; }二、选最大和最小的
思路:
1.选出最大最小放在两边。
2.一直这样选,直到选完为止。
void SelectSort_OP(int *arr, int size ) { assert(arr ); int left = 0; int right = size - 1; while (left < right) { int min = left; int max = right; //选出最大和最小的放在两边,然后缩小区间,循环 for (int i = min; i < right; i++) { if (arr [i] < arr[min]) { swap( arr[i], arr [min]); } else if (arr[i]> arr[max]) { swap( arr[i], arr [max]); } } ++left; --right; } }
相关文章推荐
- Mybatis_java项目
- poj 1755 半平面交+不等式
- LeetCode 55 Jump Game
- Java注册帐号邮箱激活验证实现
- vsftpd用户配置 No.2
- POJ 3164 Command Network(最小树形图)
- Ubuntu14.04安装后配置
- 第十三周周记
- Spring学习(三)IOC控制反转与DI依赖注入
- ffmpeg tutorial2学习--使用SDL显示到屏幕上
- Android消息机制字典型探究(一)
- 条件随机场CRF HMM,MEMM的比较
- Codeforces Beta Round #37 C. Old Berland Language 暴力 dfs
- IM聊天系统
- C# Sort排序
- dubbo服务者配置说明
- dubbo服务者配置说明
- Oracle10GODP连接11G数据库,出现ORA - 1017用户名/口令无效; 登录被拒绝 的问题
- MDWIKI
- 自搭博客日记2