经典排序算法简单介绍

冒泡排序:

int[ ] nums = {3 6 2 10 8};

冒泡排序实现思路

1.两两进行比较,把大的放到后面的位置
第一轮比较3和6当 3>6 把 3 往后移一位:3 6 2 10 8
第二轮比较:3 6 2 10 8 --> 3 2 6 10 8
第三轮比较:3 2 6 10 8 --> 3 2 6 10 8
第四轮比较:3 2 6 10 8–> 3 2 6 8 10
第二趟:
第一次:3 2 6 8 10 --> 2 3 6 8 10
第二次: 2 3 6 8 10–> 2 3 6 8 10
第三次:2 3 6 8 10–>2 3 6 8 10
第三趟:2 3 6 8 10

第四趟:

循环外层控制比较的轮数
内层循环控制每轮比较的次数

Int tmp = 0;
for(int i = 0; i < nums.length - 1;i++){
for(int j = 0; j< nums.length - 1 - i;j++){
if(nums[j] > nums[j+1]){
tmp = nums[j];
nums[j] = nums[j +1];
nums[j+1] = tmp;
}
}
}
;

选择排序

选择排序实现思路:

选择出最小的然后再进行排序

Int[] nums = {10,9,8,7,1,6,5,4,3,2}

假设第一个是最小的,然后让第一个和后面每一个数组元素进行比较,找到最小的元素的索引,把第一个和最小的进行交互位置。
10,9,8,7,1,6,5,4,3,2
假设10是最小的:
Int min_index = 0;
第一轮比较:
第一次:10,9,8,7,1,6,5,4,3,2 10和9进行比较,10>9,那么min_index = 1;
第二次:10,9,8,7,1,6,5,4,3,2 9>8 那么 min_index = 2
第三次:10,9,8,7,1,6,5,4,3,2 8>7 那么 min_index = 3
第四次:10,9,8,7,1,6,5,4,3,2 7>1 那么 min_index = 4
第五次:10,9,8,7,1,6,5,4,3,2 1<6 那么 min_index = 4
第六次:10,9,8,7,1,6,5,4,3,2 1<5 那么 min_index = 4
第七次:10,9,8,7,1,6,5,4,3,2 1<4 那么 min_index = 4
第八次:10,9,8,7,1,6,5,4,3,2 1<3 那么 min_index = 4
第九次:10,9,8,7,1,6,5,4,3,2 1<2 那么 min_index = 4
Int tmp = 0;
If(min_index != 0){
Tmp = nums[0];
Nums[0] = nums[min_index];
Nums[min_index] = tmp;
}
1,9,8,7,10,6,5,4,3,2
第二轮比较:
1,2,8,7,10,6,5,4,3,9
第三轮比较:
1,2,3,7,10,6,5,4,8,9
第四轮比较:
1,2,3,4,10,6,5,7,8,9
第五轮比较:
1,2,3,4,5,6,10,7,8,9
第六轮比较:
1,2,3,4,5,6,10,7,8,9 min_index = 7
第七轮比较:
1,2,3,4,5,6,7,10,8,9
第八轮比较:
1,2,3,4,5,6,7,8,10,9
第九轮比较:
1,2,3,4,5,6,7,8,9,10

插入排序

调试:

Debug运行方式:
1.	在需要的代码行出打上断点(在指定行,右键,toggle breakpoint)
2.	通过debug模式运行(右键 debug as -> java application)
3.	F5进入方法 F6下一行 F8执行完成debug
4.	Debug可以查看变量的值的变化

二分查找

Int[] nums = {12,25,30,8,6};
使用二分法查询指定元素
查找元素为25
1. 对数组进行排序 12,25,30,8,6
2. 排序之后的数组元素 6,8,12,25,30
3. 先跟中间值12进行比较 25 >12
4. 确定查找范围:25 30

如果查找的元素为8
1.	排序
2.	和中间元素进行比较确定下一步的查询范围 8 < 12
3.	查询数组的前半部分6,8
4.	再对前半部分进行一分为二进行查找

猜数字游戏:
1~100 猜29
Int no.
Int middle = len /2

If(no. < Nums[midlle]){
//循环前半部分查找

}else{
//从后半半部分找
}

递归

1. 要有出口,递归条件的结束

2. 方法的返回值作为参数使用

3. 重复的调用动作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值