关于选择排序的优化——同时找出最小值与最大值

近期在学习排序算法,第一种方法就是选择排序。首先选择排序是一种不稳定的算法,其思想是通过遍历数组,找出最小值(最大值)的位置,放到已排序序列的启示(末尾)位置。
根据选择排序的基本思想,我们可以对算法进行优化,在一次遍历中,找到最小值与最大值,再进行交换,这样就可以节省一半的时间。

经典选择排序算法代码

public void Sort(){int[] arr = {38,24,123,57,67,21,87,54,34,12,36,2,42};arr = selectSort(arr);
}public int[] selectSort(int[] arr){int n = arr.length;for(int i = 0; i < n - 1; i ++){int minPos = i;for(int j = i+1; j < n; j ++){minPos = arr[j] > arr[minPos] ? minPos : j;  }swap(arr,i,minPos);}return arr;
}public void swap(int[] arr, int j, int minPos){int temp = arr[j];arr[j] = arr[minPos];arr[minPos] = temp;
}

优化后选择排序代码(同时找出最小值与最大值)

public void Sort(){int[] arr = {38,24,123,57,67,21,87,54,34,12,36,2,42};arr = selectSort(arr);
}public int[] selectSort(int[] arr){int n = arr.length;for(int i = 0; i < n/2; i ++){int minPos = i;int maxPos = n - i - 1;//找出最小值进行交换for(int j = i+1; j < n; j ++){minPos = arr[j] > arr[minPos] ? minPos : j;  }swap(arr,i,minPos);//找出最大值进行交换for(int j = n-i-1; j > 0; j --){maxPos = arr[j] < arr[maxPos] ? maxPos : j;}swap(arr,n-i-1,maxPos);}return arr;
}public void swap(int[] arr, int j, int minPos){int temp = arr[j];arr[j] = arr[minPos];arr[minPos] = temp;
}

关于选择排序的优化——同时找出最小值与最大值相关推荐

  1. 挑战程序设计竞赛部分题目选择排序、二分查找找出下标、深度优先算法、求三角形max周长、蚂蚁算法、操作excel

    首先提供帮助类 可能这个类还需要更新 .求最大值.求最小值.选择排序.二分查找找出下标.二分查找排好序列里面是否有那个值 public class Util {//求最大值public static ...

  2. python随机生成10个整数列表_python_随机产生10个整数后找出最小值,最大值。

    i = 0 sum = 0 list_num = [] while i <10: ran_num = random.randint(1,20) if ran_num not in list_nu ...

  3. 简单选择排序及其优化

    1.排序步骤 对n个记录进行扫描,选择最小的记录,将其放在第一个位置,接着在剩下的n-1个记录中扫描,选择最小的记录将其放到第二个位置,不断重复这个过程,知道剩下最后一个记录为止. 示例代码: //简 ...

  4. 实验五:任意输入10个int类型数据,排序输出,再找出素数

    一.实验代码如下: 1 /*本程序用来任意输入10个int类型数据,排序输出,再找出素数*/ 2 3 package jiangli; 4 5 import java.util.Scanner; 6 ...

  5. 类的使用经典案例使用类的成员函数显示时间、找出元素的最大值【C++面向对象编程】

    文章目录 一.普通函数显示时间 二.使用类的成员函数显示时间 三.找出元素的最大值(使用类的成员函数) 一.普通函数显示时间 #include <iostream> using names ...

  6. 实验4-1-3 找出最小值 (20 分)

    实验4-1-3 找出最小值 (20 分) 本题要求编写程序,找出给定一系列整数中的最小值. 输入格式: 输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔. 输出格式: 在一行中按照&q ...

  7. 指针练习 - 使用指针找出函数中最大值和最小值

    使用指针找出函数中最大值和最小值 实现一个函数,函数完成如下功能: 1.函数的输入为一个数组,数组的成员个数不定(即:可能为 0 个,也可能为多个) 2.函数找到成员的最大元素和最小元素,并能让函数的 ...

  8. Excel 如何找出最小值所对应的列名?

    有时我们需要找出某行中的最小值,并获取到最小值所在的列名称,在Excel可以怎么实现呢? 先看看效果图: 公式设置如下(仅供参考): 公式说明: ①.最小值:MIN(A2:D2) ②.最小值所在列:M ...

  9. C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差

    C语言简单算法之求交错序列前N项和,统计学生平均成绩与及格人数,求1到100的和,求奇数分之一序列前N项和,找出最小值,求n!,统计字符,最佳情侣身高差 [1] 1.题目三 求交错序列前N项和 1.实 ...

最新文章

  1. Howto: Deploy VC2008 apps without installing vcredist_x86.exe
  2. 苹果免费Mac OS X和办公软件动了谁的奶酪
  3. 少侠请重新来过 - Vue学习笔记(二) - Vue生命周期
  4. rust模组服如何切换标准服_送给玩模组服的萌新们
  5. 看漫画,学电子,我居然看懂了!
  6. C# Memory Cache 踩坑记录
  7. 前端_网页编程 Form表单与模板引擎(上)
  8. python 接口测试 如何写配置文件_python接口自动化测试 - configparser配置文件解析器详细使用...
  9. 【2016年第6期】科研数据的开放:进展、模式与新探索
  10. 快速修剪技巧_20个相见恨晚的CAD画图神技巧,让你效率飞升!
  11. 钉钉自定义机器人 发送文本 换行 \n无效果
  12. 分享一波 Altium Designer超全封装库(带3D模型)
  13. win7计算机开机启动项设置,开机启动项,教您Win7开机启动项怎么设置
  14. AB PLC软件如何授权或者破解
  15. C程序设计汇编试题(第三版 )谭浩强主编 第三章 选择题
  16. 《鸟哥Linux私房菜之基础篇》(第四版)学习笔记 —— 1、Linux是什么与如何学习
  17. C++打印机首选项设置
  18. 马云:心要善,刀要快 | 内部干货
  19. Jquery插件包-jqwidgets
  20. 开上新能源车之后,如何摆脱“充电焦虑”?

热门文章

  1. C,C++宏中#与##的讲解
  2. java.net.URLEncode编码 与 URLDecode解码问题
  3. python输出日期语句_如何从Python的原始语句中提取时间-日期-时间段信息
  4. 单选按钮必填会有红色选中提示吗_为什么单选按钮和复选框不能共存?
  5. win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)
  6. 用计算机进行服装设计,电脑服装设计(10制版1班)
  7. node oauth2验证_如何设置和使用护照OAuth Facebook身份验证(第1部分)| Node.js
  8. c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
  9. 航空机票预订c#代码_航空公司座位预订问题的C ++程序
  10. Java ResourceBundle getLocale()方法与示例