java部分排序算法
目录
1.直接插入排序
2.折半插入排序
3.选择排序
4.冒泡排序
十大内部排序算法:
选择排序
直接选择排序、堆排序
交换排序
冒泡排序、快速排序
插入排序
直接插入排序、折半插入排序、Shell 排序
归并排序
桶式排序
基数排序
1.直接插入排序
每插入一个数据,就会在原来序列中进行排序,插入几次排序几次。
public class YangSort {
public static void main(String[] args) {
int []nums={2,8,5,3,9,3};
numsSort(nums);
for(int i = 0;i < nums.length;i++){
System.out.print(nums[i]+"\t");
}
}
//直接插入排序
public static void numsSort(int []nums){
for(int i = 1; i < nums.length; i++){
int temp = nums[i];//temp=8
int j = i-1;//j=0
for(;j >= 0 && temp < nums[j]; j--){
nums[j+1] = nums[j];
}
nums[j+1] = temp;
}
}
}
2.折半插入排序
用二分法根据插入数据大小确定插入数据应所处位置,再把之后的数据后移。
//折半插入排序
public static void halfSort(int[]nums){
for(int i = 1; i < nums.length; i++){
int temp = nums[i];
int left = 0,right = i - 1;// 左指针 右指针
while(left <= right){// 通过二分法寻找插入位置
int mid = left +(right - left)/2;
if(nums[mid] > temp){
right = mid -1;
}
else{
left = mid + 1;
}
}
int j = i - 1;// 将left后面的数据向后移动,共有i+1个数据
while(j >= left){
nums[j + 1] = nums[j];
j--;
}
nums[left] = temp;// 将数据插入通过二分法找到的位置
}
}
3.选择排序
依次选择最小值放在最前面
//选择排序
public static void selectSort(int []nums){
for(int i=0;i<nums.length;i++){
int min=i;
for(int j=i+1;j<nums.length;j++){//内层循环表示依次选出最小值的索引
if(nums[j]<nums[min]){
min=j;
}
}
if(min != i){//把i之后选出的最小值与i所在值互换
int temp=nums[i];
nums[i]=nums[min];
nums[min]=temp;
}
}
}
4.冒泡排序
每次选择一个最大值放到后面
//冒泡排序
public static void bubbleSort(int []nums){//外层循次数 为nums.length-1次
for(int i=0;i<nums.length-1;i++){
for(int j=0; j<nums.length-i-1; j++){//内层循环进行冒泡,因为每完成一次外层循环,就会在后面多一个有序序列,因此可以不用比较
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
}
上面的是部分排序方法。
说说最近的情况吧,这几天线下课都转为了线上课,一直在宿舍窝着,同时为即将的项目做准备,说说那个项目吧,还是基于springboot框架,但又添加了很多新的东西,所以这段时间需要把这些新的东西掌握,大概是下周吧,就要进行这个项目的实战了。
现在每天都要做核酸。
不知道为什么,我这段时间感觉到身心俱疲,可能是睡眠时间不足吧。
再过一段时间新生就会返校了,俺也可以被叫学姐了,这个还是挺让人开心的。
我也不知道该说些什么了,发文助手现在还是不给发步,监测到文章 质量较低,行吧行吧,我是在水博客,既然要水博客,那一定要好好水博客,水完之后我就去做核酸。
43EA4036E9689CE8E53C94C073B1E774,B675266EBD39BA4F5AD9E8EE0D750893,5F051E2996B9D664AC8873BBAB7A80D9。
上面是用的md5加密,大家自行取之。