1、冒泡排序
//冒泡排序
package 排序算法;
public class Test {
public static void main(String[] args) {
int[] nums={34,4,56,17,90,65};
for(int i=0;i<nums.length-1;i++){
for(int j=0;j<nums.length-1-i;j++){ //比较轮数等于数列的长度-1
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];
}
}
}
for (int x:nums){
System.out.println(x);
}
}
}
2、选择排序
//选择排序算法
package 排序算法;
public class Test2 {
public static void main(String[] args) {
int[] nums={34,4,56,17,90,65};
int minIndex=0;//用来记录每次比较的最小值下标
for (int i=0;i<nums.length;i++){
minIndex=i; //每轮假设一个最小值下标
for(int j=i+1;j<nums.length;j++){
if(nums[minIndex]>nums[j]){
minIndex=j;
}
}
//判断需要交换的数下标是否为自己
if (minIndex!=i){
nums[minIndex]=nums[minIndex]+nums[i];
nums[i]=nums[minIndex]-nums[i];
nums[minIndex]=nums[minIndex]-nums[i];
}
}
for (int n:nums){
System.out.println(n);
}
}
}
3、插入排序
//插入排序算法
package 排序算法;
public class Test3 {
public static void main(String[] args){
int[] nums={34,4,56,17,90,65};
for (int i=1;i<nums.length;i++){
int temp=nums[i];
int j=0;
for(j=i-1;j>=0;j--){
if (nums[j]>temp){
nums[j+1]=nums[j];
}else {
break;
}
}
if (nums[j+1]!=temp){
nums[j+1]=temp;
}
}
for (int x:nums){
System.out.println(x);
}
}
}
4、二分查找排序
package 排序算法;
import java.util.*;
public class Test4{
public static void main(String[] args){
int[] num={10,20,50,65,86,90};
int index=Arrays.binarySearch(num, 10);
System.out.println("找到的数字下标是:"+index);
}
}
//二分查找算法(折半查找)
package 排序算法;
import java.util.Scanner;;
public class Test4 {
public static void main(String[] args){
//必须保证数列是有序的
int[] num = {10,20,50,65,86,90};
int index=binarySearch(num, 22);
System.out.println(index);
}
//二分查找
public static int binarySearch(int[] num,int key){
int start=0; //开始下标
int end=num.length-1; //结束下标
while(start<=end){
int mid=(start+end)/2;
if(num[mid]>key){
end=mid-1;
}else if (num[mid]<key) {
start=mid+1;
}else {
return mid;
}
}
return -1;
}
}