基础的排序算法
排序
java中常见的排序算法:
-
冒泡排序
-
选择排序
-
插入排序
-
二分查找
-
直接排序
冒泡排序
实现原理两两比较保证每轮排序最后一个是最大的值,越往前值越小。
代码展示: 输出结果为从小到大排序
/**
* @program: java
* @Description TODO
* @author: 90420
* @create: 2020-12-21 19:11
* 冒泡排序
**/
public class boke {
public static void main(String[] args) {
int[] nums={10,3,43,23,32,-21,-43-87};
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]){
//如果前一个值比后一个值大那么将他们调换位置
nums[j]=nums[j]*nums[j+1]; //此处可以有其他方法 比如加减法 异或法
nums[j+1]=nums[j]/nums[j+1];
nums[j]=nums[j]/nums[j+1];
}
}
}
System.out.println(Arrays.toString(nums));//此处注意得把他们转化为字符串才能输出
}
}
选择排序
选择排序改进了冒泡排序,每次遍历列表只做一次交换,为了做到这一点,一个选择排序在遍历时寻找最大的值,并在完成遍历后,将其放到正确的地方。第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后。
代码展示:
/**
* @program: java
* @Description TODO
* @author: 90420
* @create: 2020-12-21 19:32
* 选择排序
**/
public class Select {
public static void main(String[] args) {//选择排序将一个数额和其他数对比找出最大值放在最右边
int[] number={123,32,45,76,45,73,-10,-20};
for (int i=0;i<number.length-1;i++){
for(int j=i;j<number.length;j++){
if(number[i]>number[j]){
int middle=0;
middle=number[i];
number[i]=number[j];
number[j]=middle;
}
}
}
System.out.println(Arrays.toString(number));
}
}
插入排序
实现原理:
每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
代码实现:
/**
* @program: java
* @Description TODO
* @author: 90420
* @create: 2020-12-21 20:16
* 插入排序
**/
public class Insert {//插入排序
public static void main(String[] args) {//每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
int[] nums={10,3,43,23,32,-21,-43,-87};
for(int i=1;i<nums.length;i++){//重第二个数开始比较
for (int j=i;j>0;j--){
if(nums[j]<nums[j-1]){
nums[j]=nums[j]+nums[j-1];
nums[j-1]=nums[j]-nums[j-1];
nums[j]=nums[j]-nums[j-1];
}
}
}
System.out.println(Arrays.toString(nums));
}
}
二分查找
实现原理:二分查找:在有序列表中从中间项开始查找,如果要查询的数值比中间值大那么就将锁定右半区,将最小值改为中间值坐标加一
代码实现:
/**
* @program: java
* @Description TODO
* @author: 90420
* @create: 2020-12-21 20:28
**/
public class Binary {
public static void main(String[] args) {
//二分查找:在有序列表中从中间项开始查找,如果要查询的
//数值比中间值大那么就将锁定右半区,将最小值改为中间值坐标加一
int [] num={10,20,30,40,50,60,70,100,110};
int result=-1;//表示没找到
int number=20;//需要查询的值
int min=0;//初始的最小值
int max=num.length-1;//初始的最大值
while (min<=max){
int middle=(max+min)/2;
if(number==num[middle]){
result=num[middle];
break;
} else if(number>num[middle]){
min=middle+1;
}else{
max=middle-1;
}
}
System.out.println("结果是:"+result);
}
}

浙公网安备 33010602011771号