Java写一个快速排序_java实现快速排序

b0bed25a744954dc72859e4b1a86a4f9.png

以上为思路。

总的来说,快速排序也是利用了分治法的思想。

基本步骤:1.先选择好合适的主元pivot,

2.然后再把比主元小的元素放到主元的左边(右边),把较大的元素放到主元的右边(左边),

3.接着再以主元为分界点,把数组分为两个部分,再分别对两边的数组重复第二步的操作,

4.最后便实现了有序排列。

快速排序的时间复杂度为O(NlgN),这是一种不稳定的排序方法。

以下代码实现

public static void quickSort(int arr[], int left, int right) {

int index = partition(arr, left, right);

if (left < index - 1)

quickSort(arr, left, index - 1);

if (index < right)

quickSort(arr, index, right);

}

//以二分法的思路对数组分组

private static int partition(int arr[], int left, int right){

int i = left, j = right;

int tmp;

//以最左边、最右边、中间三个数的中位数为主元

int pivot = findPivot(arr, left, (left+right)>>1, right);

while (i <= j) {

while (arr[i] < pivot)

i++;

while (arr[j] > pivot)

j--;

if (i <= j) {

tmp = arr[i];

arr[i] = arr[j];

arr[j] = tmp;

i++;

j--;

}

}

return i;

}

//确定主元

private static int findPivot(int[] nums, int left, int mid, int right){

if(nums[left] > nums[right]) {

int temp = nums[left];

nums[left] = nums[right];

nums[right] = temp;

}

if(nums[left] > nums[mid]) {

int temp = nums[left];

nums[left] = nums[mid];

nums[mid] = temp;

}

if(nums[mid] > nums[right]) {

int temp = nums[right];

nums[right] = nums[mid];

nums[mid] = temp;

}

return nums[mid];

}

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

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

相关文章

python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)...

1 #-*- coding: utf-8 -*-2 #批量操作linux服务器&#xff08;执行命令&#xff0c;上传&#xff0c;下载&#xff09;3 #!/usr/bin/python4 import paramiko5 import datetime6 import os7 import threading8 def ssh2(ip,username,passwd,cmd):9 try:10 paramiko…

解密ControlRotation与ActorRotation

在实现角色移动时&#xff0c;我们是通过获取当前角色向前或者向后移动的向量来计算具体的移动步长&#xff0c;进而增量设置角色位置以达到使角色移动的目的。但是获取向前或者向后的向量得先知道当前角色在世界坐标系中旋转的角度&#xff0c;于是我们就在ControlRotation和A…

llinux下kvm虚拟化

原理就是本来可能要10台物理机完成的事现在只要5台&#xff0c;分别在每台物理机上虚拟一台&#xff0c;这5太虚拟机共享一个stronge&#xff0c;比如有一台物理机down掉后或是要做维护&#xff0c;我们可以把它上面的虚拟机牵走&#xff0c;从而减少损失或防止终端业务&#x…

系统会自带java吗_使用eclipse自带制作帮助系统

①help的api的生成1&#xff1a;项目中的生成javadoc或右击项目的导出&#xff0c;成javadoc格式。2&#xff1a;找打jdk中的Javadoc位置。如果忘记可以同cmd窗口通过指令寻找jdk位置&#xff0c;还可以直接再我的电脑中搜索javadoc。查找Javadoc.exe路径位置&#xff0c;填入j…

UE4 左右立体参数

在编辑器的editor preferences里设置下面参数

java arraylist范围_Java常见集合之ArrayList深入分析

1 /*2 继承自AbstractList&#xff0c;实现了List、RandomAccess、Cloneable、Serializable接口3 1)RandomAccess接口&#xff1a;用来快速随机存取&#xff0c;在实现了该接口后&#xff0c;用普通for来遍历&#xff0c;性能更高4 2)Cloneable接口&#xff1a;实现了该接口&am…

UE4 多个static mesh合并成一个static mesh

第一种方法&#xff1a; 1. 把需要合并的所有的static mesh导入到一个level中&#xff0c;static mesh导入到level中后&#xff0c;会自动变成static mesh actor 2. 在level的world outliner面板把选中需要合并的所有的static mesh actor 3. 鼠标右键&#xff0c;在弹出的快…

在UE中自由绘制基本图元的几种方法

1. 在UMG中可以使用UWidgetBlueprintLibrary类来绘制&#xff0c;UWidgetBlueprintLibrary类提供了一系列的静态函数可以使用。但只提供了DrawLine&#xff0c;DrawLines&#xff0c;DrawBox&#xff0c;DrawText&#xff0c;DrawTextFormatted函数&#xff0c;如果要自己绘制的…

java work set没有显示出来_eclipse里新建work set,将项目分组放在不同文件夹

想必大家的Eclipse里也会有这么多得工程......每次工作使用到的项目肯定不会太多......每次从这么大数量的工程当中找到自己要使用的,必须大规模的滚动滚动条......有点不和谐了.无意当中看到了working set自己创建了一个 workingset 并将相应的 projects 添加到 working set 当…

指针的一些问题

1、c/c语言中不少地方&#xff0c;数组和指针可以相互替换使用&#xff0c;容易让人产生一种错觉&#xff0c;指针和数组是等价的。 数组要么在静态存储区域创建&#xff0c;如全局数组&#xff1b;要么在栈上创建如函数内的数组。数组的名称对应着&#xff08;而不是指向&…

java连接imserver_java后端IM消息推送服务开发——协议

最近在一家saas企业使用Mqtt开发IM消息推送服务&#xff0c;把开发中的一些问题记录下来&#xff0c;项目仍在商用中&#xff0c;完整的消息服务包括4个模块---协议protocol&#xff0c;信令Signal&#xff0c;规则Rule&#xff0c;状态Status&#xff0c;这个主题主要是协议pr…

好多邮箱的SMTP设置

http://731771490.diandian.com/post/2011-04-20/19576550转载于:https://www.cnblogs.com/mantian/p/3828837.html

新手向:如何理解OpenGL中着色器,渲染管线,光栅化等概念

首先&#xff0c;光栅化&#xff08;Rasterize/rasteriztion&#xff09;。 这个词儿Adobe官方翻译成栅格化或者像素化。没错&#xff0c;就是把矢量图形转化成像素点儿的过程。我们屏幕上显示的画面都是由像素组成&#xff0c;而三维物体都是点线面构成的。要让点线面&#xf…

tankwar的java坦克子弹撞墙_tankwar

tankwar 是使用java开发的一个单机版的小游戏 (未使用任何游戏引擎).和90经典版的坦克大战有些不同, 这里是纯坦克之间的战争, 英雄坦克并不用保护它的家.特色:1. 游戏共设6个关卡. (支持无限关卡)关卡设置中包括敌人坦克数量, 移动速度, 子弹速度, 以及子弹的杀伤力, 炸弹数量…

材质加载

UMaterial* Material LoadObject<UMaterial>(NULL, TEXT("/Game/VertexColorMaterial"), NULL, LOAD_None, NULL);

java如何添加进程_如何创建一个进程,如何进程调用进程

java一般用线程就够了&#xff0c;多进程优势在于每个进程互不干扰&#xff0c;劣势在于太耗费内存&#xff0c;任何事情都不是绝对的&#xff0c;在编写Java程序时&#xff0c;有时候需要在Java程序中执行另外一个程序。1、启动程序Java提供了两种方法用来启动其它程序&#x…

输入学生成绩,并按升序排列 Ascending.java

import java.util.Arrays;import java.util.Scanner;public class Ascending{ public static void main(String[] args){ Scanner innew Scanner(System.in); int[] arrnew int[10]; for(int i0;i<arr.length;i){ System.out.println("请输入第"(i1)"个学生的…

java判断ftp创建目录是否成功_Java判断Ftp服务器目录是否存在,若不存在创建目录 ....

解决方法1&#xff1a;package com.soft4j.log4j;import java.io.IOException;import sun.net.ftp.FtpClient;public class FtpTest{static String middle_ftpServer "10.103.2.250";static String middle_user "ora9iftp";static String middle_passwor…

第三方静态库的使用

1. 工程根目录下创建文件夹“ThirdParty”&#xff0c;然后在此文件夹下创建“includes”和“libs”文件夹 2. 拷贝静态库的头文件和库文件到上面的文件夹下 3. 修改工程的build.cs文件&#xff0c;增加下面代码1&#xff09;在类中private string ThirdPartyPath { …