博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选择排序(分析+代码调优)
阅读量:2388 次
发布时间:2019-05-10

本文共 3754 字,大约阅读时间需要 12 分钟。

选择排序

  • 选择排序 :
  • 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

分析

// 第一次		int x = 0;		for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第一次比较后:"); printArray(arr); // 第二次 x = 1; for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第二次比较后:"); printArray(arr); // 第三次 x = 2; for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第三次比较后:"); printArray(arr); // 第四次 x = 3; for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第四次比较后:"); printArray(arr); */ /* //通过观察发现代码的重复度太高,所以用循环改进 for(int x=0; x

使用大量数据测试选择排序的时间

排序前的时间是:2020-03-16 13:35:52排序前的时间是:2020-03-16 13:36:01

这里优化的思路就是在每次循环找出最小值的时候同时找出最大值并排序,这样的话循环的次数就会少一半

//选择排序的优化    public static void selectSort2(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int num = arr[i];//将数组的第一个元素也就是最小元素赋值给num int index = i;//将其下表赋值给index for (int j = i + 1; j < arr.length; j++) {
if (num > arr[j]) {
//如果最小元素大于比较的值,则将num值重新赋值,index赋值新的下标 num = arr[j]; index = j; } } if (index != i) {
//如果index是i值,说明i下标的值是最小值,如果不是则说明不是,则交换 int temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; } } }

使用大量数据测试选择排序优化后的时间

排序前的时间是:2020-03-16 13:54:41排序前的时间是:2020-03-16 13:54:43

代码

package SortDemo;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;/** * @date: 2020/3/16 * 选择排序 : * 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处 */public class SEL {
public static void main(String[] args) {
// int[] arrays = {24, 69, 80, 57, 13};/* // 第一次 int x = 0; for (int y = x + 1; y < arr.length; y++) { if (arr[y] < arr[x]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第一次比较后:"); printArray(arr); // 第二次 x = 1; for (int y = x + 1; y < arr.length; y++) { if (arr[y] < arr[x]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第二次比较后:"); printArray(arr); // 第三次 x = 2; for (int y = x + 1; y < arr.length; y++) { if (arr[y] < arr[x]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第三次比较后:"); printArray(arr); // 第四次 x = 3; for (int y = x + 1; y < arr.length; y++) { if (arr[y] < arr[x]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } System.out.println("第四次比较后:"); printArray(arr); */ /* //通过观察发现代码的重复度太高,所以用循环改进 for(int x=0; x
arr[j]) {
int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } //选择排序的优化 public static void selectSort2(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int num = arr[i];//将数组的第一个元素也就是最小元素赋值给num int index = i;//将其下表赋值给index for (int j = i + 1; j < arr.length; j++) {
if (num > arr[j]) {
//如果最小元素大于比较的值,则将num值重新赋值,index赋值新的下标 num = arr[j]; index = j; } } if (index != i) {
//如果index是i值,说明i下标的值是最小值,如果不是则说明不是,则交换 int temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; } } }}

转载地址:http://ktxab.baihongyu.com/

你可能感兴趣的文章
使用awr来诊断数据库性能问题
查看>>
exp-00056 exp-00000 导出终止失败的处理
查看>>
oracle impdp network_link直接导入数据报ora-39064 ora-29285
查看>>
oracle 11g rac asm ORA-15064错误
查看>>
Oracle ASM Disk Header
查看>>
Oracle ASM Disk Directory
查看>>
Oracle 12C 跨网络传输数据库
查看>>
Oracle 12.2使用dbms_redefinition.redef_table过程来重定义表的存储属性
查看>>
Oracle 12c full transportable export & import
查看>>
Oracle 12CR2 RAC ORA-01033
查看>>
Oracle 12C ORA-12545 While Connecting to RAC through SCAN Name
查看>>
Oracle 12cr2 数据库之间跨网络传输表,分区或子分区
查看>>
Oracle 12CR2 dbca -silent -createDatabase
查看>>
Oracle OER 7451 in Load Indicator : Error Code = OSD-04500的问题处理
查看>>
Oracle使用联机重定义来给表增加新列与分区
查看>>
Oracle Linux 7使用cron来管理Oracle ASM审计文件目录的增长
查看>>
Connecting To 12CR2 RAC Pluggable Database With ORA-1033
查看>>
Oracle 12.2使用对象数据类型来重定义表
查看>>
重命名与迁移联机数据文件
查看>>
Oracle 12c RMAN Cross-Platform Transport of a Closed PDB
查看>>