Java 中的四种排序算法

// 3.若左边的元素大于右边的元素则交换两个元素的位置

if (brr[j] > brr[j + 1]) {

int temp = brr[j];

brr[j] = brr[j + 1];

brr[j + 1] = temp;

flag = false;

// 不使用第三者变量实现两个元素的交换

int a = 2;

int b = 3;

a = a + b; // a=5

b = a - b; // b=2

a = a - b; // a=3

// 使用抑或运算符

a = a ^ b;

b = a ^ b;

a = a ^ b;

}

}

// 根据 flag 判断整个循环时候发生交换

if (flag) {

System.out.println(brr);

}

}

}

// 插入排序算法

public static void insertSort(int[] irr) {

int j;

for (int i = 1; i < irr.length; i++) {

int temp = irr[i];

for (j = i - 1; j >= 0 && irr[j] > temp; j–) {

irr[j + 1] = irr[j];

}

irr[j + 1] = temp;

}

}

// 选择排序算法

public static void selectSort(int[] srr) {

int min = 0;

for (int i = 0; i < srr.length - 1; i++) {

min = i;

for (int j = i + 1; j < srr.length; j++) {

if (srr[min] > srr[j]) {

min = j;

}

}

if (min != i) {

int temp = srr[i];

srr[i] = srr[min];

srr[min] = temp;

}

}

}

// 快速排序算法

public static void fastSort(int[] frr, int left, int right) {

int p = (left + right) / 2;

int pivot = frr[p];

// 2.分别使用左右两边的元素依次与基准值比较大小,将所有比基准值小的元素放在左边,将所有比基准值大的或者相等的元素放在右边

int i = left;

int j = right;

for (; i < j;) {

// 先使用左边的元素与基准值比较,若左边的元素小于基准值并且确实在左边,则使用下一个左边的元素继续与基准值大或者相等的元素放在右边

while (frr[i] < pivot && i < p) {

i++;

}

// 直到左边有元素并且左边元素不在小于基准值,此时将左边元素移动到 p 指向的位置,p 指向该元素原来的位置

if (i < p) {

frr[p] = frr[i];

p = i;

}

// 再使用右边的元素与基准值比较,若右边的元素大于基准值并且确实在右边,则使用下一个右边的元素继续与基准值大或者相等的元素放在左边

while (frr[j] >= pivot && j > p) {

j–;

}

// 直到右边有元素并且右边元素不在大于基准值,此时将右边元素移动到 p 指向的位置,p 指向该元素原来的位置

if (j > p) {

frr[p] = frr[j];

p = j;

}

}

// 当左边元素的下标等于右边元素的下标时,把取出来的中间值重新赋值回去

frr[p] = pivot;

if ((p - left) > 1) {

fastSort(frr, left, p - 1);

}

if ((right - p) > 1) {

fastSort(frr, p + 1, right);

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值