快速排序的改进

package com.txq.test;
/*** quicksort,三方面改进:①三数中值选择枢纽元②容量小的时候使用插入排序③重复元素的处理* @author XueQiang Tong* @date 2017/10/25*/
public class QS {public void quicksort(int []arr,int low,int high){int first = low;int last = high;int left = low;int right = high;int leftLen = 0;int rightLen = 0;//当分割后的容量较小时,使用插入排序,提高性能if(high - low + 1 <= 10){InsertSort(arr,low,high);return;}int key = SelectPivotMedianOfThree(arr,low,high);while(low < high){while(high > low && arr[high] >= key){if(arr[high] == key){//重复元素处理策略:分割过程中把他们放在数组两端,递归调用时掠过他们,提高性能swap(arr,high,right);right --;rightLen ++;}high --;}arr[low] = arr[high];//交换while(high > low && arr[low] <= key){if(arr[low] == key){swap(arr,low,left);left ++;leftLen ++;}low ++;}arr[high] = arr[low];//交换}arr[low] = key;//此时总是low = high,把key放在此位置,一次迭代完成,进入下次递归调用//接下来,把重复元素存储到key的周围int i = low - 1;int j = first;while(j < left && arr[i] != key){swap(arr,j,i);i --;j ++;}i = low + 1;j = last;while(j > right && arr[i] != key){swap(arr,j,i);i ++;j --;}quicksort(arr,first,low - leftLen - 1);quicksort(arr,low + rightLen + 1,last);}/*** low,mid,high,对三个数排序,arr[mid] <= arr[low] <= arr[high],取arr[low]作为枢纽元* @param arr* @param low* @param high* @return*/private int SelectPivotMedianOfThree(int[] arr, int low, int high) {int mid = low + ((high - low) >> 1);if(arr[mid] > arr[high]){swap(arr,mid,high);}if(arr[low] > arr[high]){swap(arr,low,high);}if(arr[low] < arr[mid]){swap(arr,low,mid);}return arr[low];}public void swap(int arr[],int i, int j) {int tmp;tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;		}/*** 插入排序* @param arr*/private void InsertSort(int[] arr,int low,int high) {int i,j;int n = high - low + 1;int target;for(i = low+1;i < low+n;i++){j = i;target = arr[i];while(j > low && target < arr[j-1]){arr[j] = arr[j-1];j--;}arr[j] = target;}		}	
}

 

转载于:https://www.cnblogs.com/txq157/p/7728236.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23根火柴游戏 c语言,23 根火柴游戏

#includegt;int main(){int g 23;int k 3;int b, c;printf("这里是23 根火柴游戏&#xff01;&#xff01;\n");printf("注意&#xff1a;最大移动火柴数目为三根\n");do{printf("请输入移动的火柴数目&#xff1a;\n");scanf("%d",…

springboot netty给特定客户端推送_Spring Boot 又升级了?2.0 你搞懂了吗?!

【小宅按】作为知名互联网公司都在用的技术&#xff0c;Spring Boot 2.0 的更新引起了很大的关注&#xff0c;本文将分为三部分解读 2.0 的更新&#xff1a;第一类&#xff0c;基础环境升级&#xff1b;第二类&#xff0c;默认软件替换和优化&#xff1b;第三类&#xff0c;新技…

OSI七层模型与TCP/IP五层模型详解

博主是搞是个FPGA的&#xff0c;一直没有真正的研究过以太网相关的技术&#xff0c;现在终于能静下心学习一下&#xff0c;希望自己能更深入的掌握这项最基本的通信接口技术。下面就开始搞了。 一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。…

c是过程化语言吗数据库,关于SQL错误的是()A、所有数据库的公共语言B、非过程化的C、统一的语言D、所有用SQL缩写的程序都...

关于SQL错误的是()A、所有数据库的公共语言B、非过程化的C、统一的语言D、所有用SQL缩写的程序都更多相关问题[多选] 在彩色电视机遥控系统中&#xff0c;属于模拟量控制的有()等几种。[多选] 在色度信号记录处理中&#xff0c;家用录像机一般都要对色度信号经过()等处理。[多选…

python建立数据库和基本表_python基础 — 链接 Mysql 创建 数据库和创表

重点&#xff1a; &#xff11;. 链接服务器的数据库 &#xff12;. 创建表和格式 &#xff13;. 插入多行数据 import pymysql try: hostxxx userxxx passwdxxx dbtest01 port3306 Table_namekaka5 # 链接到服务器 db pymysql.connect(host, user, passwd, db, port) # 创…

c语言陷阱试题,超级经典计算机二级C语言陷阱考试题.doc

超级经典计算机二级C语言陷阱考试题超级经典计算机二级C语言陷阱考试题若有定义&#xff1a;int a[2][3],则对a数组的第i行j列元素地址的正确引用为___d___.a)*(a[i]j) b)(ai) c)*(aj) d)a[i]j以下正确的程序段是_________.a)char str[20]; b)char *p;scanf("%s",&am…

python开发跟淘宝有关联微_Python_淘宝用户行为分析

一、数据导入与清洗 源数据量有1亿余条&#xff0c;为减轻计算量&#xff0c;抽样总量的20%用于计算分析 #codinggbk import numpy as py import pandas as pd import datetime import os os.chdir(D:/pythonlily/test1) datapd.read_csv(UserBehavior.csv,headerNone) data.co…

android 自定义表情包,android基于环信的聊天和表情自定义

环信sdk的导入自定义聊天界面此处只有静态图&#xff0c;请谅解。自定义表情发送自定义聊天界面简单说下自定义的聊天界面&#xff0c;一个带有recyclerview和的xml文件&#xff0c;和对应的adapter即可。recyclerview为展示聊天信息。通过EMClient.getInstance().chatManager(…

如何快速获取properties中的配置属性值

本文为博主原创&#xff0c;未经博主允许&#xff0c;不得转载&#xff1a; 在项目中&#xff0c;经常需要将一些配置的常量信息放到properties文件中&#xff0c;这样在项目的配置变动的时候&#xff0c;只需要修改配置文件中 对应的配置常量即可。 在项目应用中&#xff0c;如…

erlang安装_RabbitMQ的使用(一)- RabbitMQ服务安装

作者&#xff1a;markjiang7m2博客园地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/12769627.html官网地址&#xff1a;http://letyouknow.netRabbitMQ&#xff0c;消息队列的一个中间件&#xff0c;这里不打算展开介绍了。此文意在记录工作中使用RabbitMQ时的过程及…

android 本地资源 uri,Android 本地文件选择

打开系统文件&#xff1a;Intent intent new Intent(Intent.ACTION_GET_CONTENT);intent.setType("*/*");intent.addCategory(Intent.CATEGORY_OPENABLE);try {startActivityForResult(Intent.createChooser(intent, getString(R.string.im_text_select_file)), SEN…

NodeJS React 开发环境搭建

1、首先需要安装NodeJS环境&#xff0c;下载NodeJS安装程序安装即可。 NodeJS下载地址&#xff1a; https://nodejs.org/en/download/ 2、安装NodeJS的web框架express npm install express-generator -g 3、创建项目 express studyReact 4、添加jsx引擎支持 npm install ex…

dreamweaver 正则表达式为属性值加上双引号_Python正则表达式(一)

Python正则表达式正则表达式是处理字符串的强大工具&#xff0c;拥有独特的语法和独立的处理引擎。我们在大文本中匹配字符串时&#xff0c;有些情况用str自带的函数(比如find, in)可能可以完成&#xff0c;有些情况会稍稍复杂一些(比如说找出所有“像邮箱”的字符串&#xff0…

lftp linux,linux下使用 lftp

linux下使用 lftp发布时间:2007-03-18 11:41:08来源:红联作者:Addfun一直想找一个在linux里能与FlashFXP比肩的ftp客户端&#xff0c;试过了若干种GUI的ftp client&#xff0c;有free的也有non-free的&#xff0c;但实际用过得同志应该清楚&#xff0c;说它们是lj&#xff0c;恐…

js判断字符是否为空的方法

js判断字符是否为空的方法: //判断字符是否为空的方法 function isEmpty(obj){if(typeof obj "undefined" || obj null || obj ""){return true;}else{return false;} } 使用示例&#xff1a; if (!isEmpty(value)) {alert(value); } 转载于:https://ww…

mapperscan注解_SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解

原文作者&#xff1a;笑而抿之乎搭建SpringBoot环境&#xff0c;创建maven 项目后1&#xff0c;创建入口类&#xff1a;MapperScan(basePackages "com.baizhi.dao" ) //把dao层交给工厂管理SpringBootApplication//标识入口类的注解public class Applincation { …

Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决

1、android-butterknife-zeleznyandroid-butterknife-zelezny 是根据butterknife定制的一款插件&#xff0c;能够方便快速初始化&#xff0c;对于我来说是开发必备&#xff0c;本人也对此插件进行了一些优化&#xff0c;个人感觉用起来更爽 &#xff0c;博客地址&#xff1a;Bu…

软工团队 - 系统设计

软工团队 - 系统设计 修改完善需求规格说明书 针对栋哥在上周答辩中主要提到问题的相应改动 管理员层面没有在需求中得到很好的体现。没有手机号验证。那时候回答的比较含糊orz&#xff0c;所以在这里说明一下对此作出的解释和修改。 对于第一点&#xff0c;我们讨论的结果是至…

python decimal_python学习笔记一

1、~4不太明白、右移、左移整体移动添加零2、注意运算符&#xff0c;3、1<<5&716&704、set中的pop() 方法用于随机移除一个元素。字典中&#xff1a;list中5、Python dir() 函数dir()函数不带参数时&#xff0c;返回当前范围内的变量、方法和定义的类型列表&…

android theme继承原理,android – 使用Holo父主题从Theme.Light继承editText

所以我的想法是从android&#xff1a;Theme.Holo.Light扩展一个自定义主题(实际上只是一种风格),然后覆盖EditText属性以使用android&#xff1a;Theme中的父设置.它看起来像android&#xff1a;Theme.Holo.Light使用editTextStyle属性引用来更改EditTexts的外观&#xff1a;an…