没有合适的资源?快使用搜索试试~ 我知道了~
关于八大排序的算法详解
需积分: 8 2 下载量 105 浏览量
2023-04-02
16:08:15
上传
评论
收藏 1.69MB PDF 举报
温馨提示
试读
14页
包含源码运算和理论讲解,配合博主的博文排序算法总结
资源推荐
资源详情
资源评论
数组排序算法
被排序数据是一组相同类型、相同定位的数据,数组表示的就是这样的数据
排序的核心
对比大小,将顺序不符的2个数字进行“换位”,经过多次对比和必要的换位,以达到“结果是有序的”效
果。
数据的换位:不可单纯让2个变量的值分别赋值给彼此,程序代码的依次执行导致某个变量赋予新值原来
的值丢失
为了保证在交换值的过程中,变量的原值不会丢失(被重新赋值导致的覆盖)可以使用第3个变量临时存
储变量的原值
其实,也可以不使用临时变量,而使用算术运算来实现换位
1个等于号(=)在程序中表示“赋值”的意思,而不是“相等”的意思。这种做法看似更加高端,但代码的语
义较差
总结:排序的核心就是“对比”与“换位”
根据“对比”的标准不同,可产生“升序”和“降序”结果;
在某些特殊的排序算法中可能没有“换位”操作,详见后续各算法原理
效率查看
获取系统时间: long time = System.currentTimeMillis()
获取交换次数:在if判断交换开始前对 对比次数++;在if交换完对 交换次数++
冒泡排序(Bubble sort)
//假设对2个变量执行换位
int a = 7;
int b = 1;
//准备用于临时存储变量的原值
int temp;
//正确的换位
temp = a; //将a的值赋值给temp,则: a (7), b(1), temp (7)
a = b; //将b的值赋值给a, 则: a (1), b (1), temp (7)
b = temp; //将temp的值赋值给b,则: a (1), b(7), temp (7)
1
2
3
4
5
6
7
8
9
//假设对2个变量执行换位
int a = 7;
int b = 1;
//使用算术运算的换位
a = a + b; // a (8), b (1)
b = a - b; // a (8), b (7)
a = a - b; // a (1), b (7)
1
2
3
4
5
6
7
反复对比相邻的两个元素,如果与预期顺序不符则换位
因为每轮循环可以确保1个数字在正确的位置,并且,经过多轮循环后,剩余的最后1个数字肯定是
最小的数字,并且已经在最左侧了,没有必要对这个数字再进行—轮循环,所以,可以得出:循环
轮次=数组的长度-1
因为每轮都能将大的数字移动到右侧,后续的轮次就不必再对该数字进行换位了。所以,每轮循环
的次数是递减的,可以得出:循环次数=数组长度-当前轮次,在实际编写代码时,由于“当前轮次”
作为循环变量,且一般使用 0 作为初始值,即“第1轮”的“当前轮次”为0,所以,需要将公式调整
为:循环次数=数组长度-当前轮次-1
总结:
反复对比相邻的两个元素,如果与预期的顺序不符,则换位
需要进行多轮循环,可以使用嵌套的循环来实现
外层循环表示循环轮次,数组的长度-1
初始条件:int i= 0
循环条件:i< array.length -1
内层循环用于对比和换位
循环条件:数组长度-当前轮次-1
当前轮次:使用0作为初始值来计数
public class BubbleSort {
public static void main(String[] args) {
int[] numbers = {12,5431,5434,12,3,51,573,98,2};
sort(numbers);
System.out.println(Arrays.toString(numbers));
}
private static void sort(int[] numbers) {
for (int i = 0; i < numbers.length -1; i++) {
boolean flag = false;
for (int j = 0; j < numbers.length - i -1; j++) {
if (numbers[j] > numbers[j+1]) {
int temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
flag = true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
选择排序(Selection sort)
将未排序的第1个数字和剩余的每个数字进行对比,如果与预期不符,则换位。
总结:
将未排序的第1个数字和剩余的每个数字进行对比,如果与预期不符,则换位
需要进行多轮循环,可以使用嵌套的循环来实现
外层循环表示循环轮次,数组的长度-1
初始条件:int i= 0
循环条件:i< array.length -1
内层循环用于对比和换位
初始条件:int j = i + 1
循环条件:j < array.length
}
if (!flag) {
break;
}
}
}
}
17
18
19
20
21
22
23
public class SelectionSort {
public static void main(String[] args) {
int[] array = BubbleSort.getInts();
System.out.println(Arrays.toString(array));
sort(array);
System.out.println(Arrays.toString(array));
}
private static void sort(int[] array) {
//对比次数
int compareCount = 0;
1
2
3
4
5
6
7
8
9
10
11
12
剩余13页未读,继续阅读
资源评论
今天你学Java了吗
- 粉丝: 959
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功