当前位置:网站首页>排序方式(3)==>快速排序和归并排序
排序方式(3)==>快速排序和归并排序
2022-04-21 06:34:00 【萱萱不会秃头】
4.快速排序
快速排序简称快排,主要运用的是递归的主要思想
递归
递归是一个方法调用自身的方法
递归主要是包括递归关系和递归出口
例:
①数组{1,2,3,4,5,…,n}
递归出口:当n=1时,返回值为n;
递归关系:其他时候,返回值是(n-1)+1;
代码:
public static int run(int n) {
if(n==1)
return 1;//递归出口
return run(n-1)+1;//递归关系
}
②斐波那契数列
{1,1,2,3,5,8,13,…}
第三项等于前两项相加
递归出口:当n=1,n=2时,返回值均为1;
递归关系:其他情况下,返回前两项的和,即为F(n-1)+F(n-2);
代码:
public static int FI(int n) {
if(n==1) {
return 1;
}
else if(n==2) {
return 1;//递归出口
}
else
return FI(n-1)+FI(n-2);//递归关系
}
③数组的前n项和
递归出口:当n=1时,输出值为1;
递归关系:其他情况,输出前(n-1)项和加第n项的值,即为sum(n-1)+n
代码:
public static int sum(int n) {
if(n==1) {
return 1;//递归出口
}
else
return sum(n-1)+n;//递归关系
}
递归步骤:
①把左边第一个数当作基数;
②定义两个指针在第一个和最后一个位置;
③后边的指针先移动,然后好到比基准数小的数后,停止;
④前边的指针向后移动,找到比基准数大的数后,停止;
⑤数据互换
代码:
public class QuickSort {
public static void main(String[] args) {
int[] arr=new int[] {5,9,2,1,7,6,3,4,8,0};
qucik(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void qucik(int arr[],int left,int right) {
if(left>right) {
return;
}
int base=arr[left];
int i=left;
int j=right;
while(i!=j) {
while(arr[j]>=base && i<j) {
j--;
}
while(arr[i]<=base && i<j) {
i++;
}
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
arr[left]=arr[i];
arr[i]=base;
qucik(arr,left,i-1);
qucik(arr,i+1,right);
}
结果图:

5.归并排序
归并排序运用了分治法的主要思想,主要通过寻找中间变量进行排序
代码:
public static void main(String[] args){
int[] arr=new int[] {5,8,2,1,7,6,3,4,9,0};
}
public static void fen(int arr,int left, int right) {
if(left>right) {
return ;
}
int mid=(left + right)/2;
fen(arr,left,mid);
fen(arr,mid+1,right);
}
public static void he(int[] arr,int left, int right,int mid) {
int s1=left;
int s2=mid+1;
//定义临时数组
int[] temp=new int[right-left+1];
int index=0;
//将两个数组当中的小的数据放到临时数组中去
while(s1<mid && s2<=right) {
if(arr[s1]<=arr[s2]){
temp[index]=arr[s1];
index ++;
s1 ++;
}
else {
temp[index]=arr[s1];
index ++;
s2 ++;
}
}
while(s1<mid) {
temp[index]=arr[s1];
index ++;
s1 ++;
}
while(s1<right) {
temp[index]=arr[s1];
index ++;
s2 ++;
}
for(int j=0;j<temp.length;j++) {
arr[j+left]=temp[j];
}
}
结果图:

版权声明
本文为[萱萱不会秃头]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_53954158/article/details/119280514
边栏推荐
- Installation of performance testing tool JMeter & JProfiler
- Dpdk problem location: a port of a four port x710 network card cannot be initialized
- 分片上传解决单文件上传的问题
- Unity Button长按检测
- 搭建mysql主从复制、读写分离、一主一从
- Mmio and PMIO Technology
- Any password modification
- Build a deep learning server and environment configuration from scratch
- How to use keil5 to develop MSP430 and TIVA series development boards
- One day study notes
猜你喜欢

How to use JMeter and JProfiler to test and optimize software performance

Blind guess account password

蕊源RY8132、RY9140 DCDC主要替换:TI的TPS563200、TPS563201,芯源的MP1471、MP1653,矽力杰的SY8104电源芯片详细资料

使用百度地图POI爬取需要的数据

大型网站演变全过程与架构设计详解

CS5801规格书|CS5801HDMI转EDP转换方案|HDMI转DP转接板设计,HDMI2.0转EDP1.4,支持向下兼容

RTSP未授权访问

使用Render Texture在UI上显示3D模型动画

PG database cannot use zh_ CN. UTF-8:initdb: error: locale “zh_CN.UTF-8“ requires unsupported encoding “GBK“

Idea 2021.1 Useful settings
随机推荐
View source parsing
时钟IC,INS5101A,I2C低功耗 RTC 实时时钟芯片,替换HYM8563,替换(NXP)PCF8563,TCS8563,I2C低功耗 RTC 实时时钟芯片
JS不同时间格式转换
Unity关于IsPointerOverGameObject接口真机失效问题
Use Baidu map POI to crawl the required data
致翔OA漏洞复现手册
RTSP unauthorized access
SQL学习记录
Udevd retrieves the kernel module and loads the demo
uni-app 开发微信小程序项目运行时报错 Error: tourist appid
[hand pose estimation] [paper accuracy] pose guided structured region ensemble network for cascaded hand pose estimation
UFIDA OA vulnerability reproduction manual
MS12_ 020 vulnerability
宏晶微MS9123,USB 投屏控制芯片,USB 投屏器,支持 CVBS、S-Video 视频接口,
迷你考试系统v1.0.0版本
Export excel custom style with hutool tool ----- excel compression jar
ConvergenceWarning: Liblinear failed to converge, increase the number of iterations解决辦法
短信逻辑漏洞
Word XML space character
SourceTree版本回溯以及单个改动版本回溯