java排序算法(你必须会的常见排序算法)

1、排序算法说明

1、排序的定义
对一序列对象根据某个关键字进行排序
2、术语说明

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
  • 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
  • 内排序:所有排序操作都在内存中完成;
  • 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
  • 时间复杂度: 一个算法执行所耗费的时间。
  • 空间复杂度:运行完一个程序所需内存的大小
    3、 算法总结
    在这里插入图片描述
    4、算法分类
    在这里插入图片描述

二、常见算法得实现代码

1.冒泡排序

package test.allSort;

import java.util.Arrays;

/**
 * @author Mrqian
 * @time  2018-12-25
 * 冒泡排序
 * */
public class MaoPao {

	public static void main(String[] args) {
	  int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
	  maopao(arr);
	  System.out.println(Arrays.toString(arr));
	}
	public static void maopao(int [] arr) {
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr.length-i-1;j++) {
				if(arr[j]>arr[j+1]) {
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
}

2、选择排序

package test.allSort;

import java.util.Arrays;

/**
 * @author Mrqian
 * @time  2018-12-25
 * 选择排序
 * */
public class ChooseSort {

	public static void main(String[] args) {
		int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
		  choose(arr);
		  System.out.println(Arrays.toString(arr));

	}
	public static void choose(int [] arr) {
		for(int i=0;i<arr.length;i++) {
			for(int j=i;j<arr.length;j++) {
				if(arr[i]>arr[j]) {
				int temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
				}
			}
		}
	}

}

3、插入排序

package test.allSort;

import java.util.Arrays;

/**
 * @author Mrqian
 * @time  2018-12-25
 * 插入排序
 * */
public class InsertSort {
     public static void main(String[] args) {
    	 int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
   	  insertSort(arr);
   	  System.out.println(Arrays.toString(arr));
	}
     public static void insertSort(int [] arr) {
    	 for(int i=1;i<arr.length;i++) {
    		 int temp=arr[i];
    		 int j=i-1;
    		 while(arr[j]>temp&&j>=0) {
    			 arr[i]=arr[j];
    			 j--;
    		 }
    		 arr[j+1]=temp;
    	 }
     }
}

4、二分查找法

package test.allSort;

/**
 * @author Mrqian
 * @time  2018-12-25
 * 二分查找法
 * */
public class BinarySerach {
   public static void main(String[] args) {
	   int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
	  String result= binary(arr, 5);
	   System.out.println(result);
    }
   
   public static String binary(int [] arr,int a) {
	   choose(arr);
	   int first=0;
	   int last=arr.length-1;
	   int mid;
	   while(first<=last) {
		   mid=(first+last)/2;
		   if(arr[mid]==a) {
			   return "找到该元素"+a;
		   }else if(arr[mid]>a) {
			   last=mid-1;
		   }else {
			   first=mid+1;
		   }
	   }
	return "没找到该元素"+a;
   }
	public static void choose(int [] arr) {
		for(int i=0;i<arr.length;i++) {
			for(int j=i;j<arr.length;j++) {
				if(arr[i]>arr[j]) {
				int temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
				}
			}
		}
	}
}

5、快速排序

package test.allSort;

import java.util.Arrays;
/**
 * @author Mrqian
 * @time  2018-12-25
 * 快速排序
 * */
public class QUickSort {
   public static void main(String[] args) {
	  int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
	  kspx(arr, 0, arr.length-1);
	  System.out.println(Arrays.toString(arr));
    }
   public static int quickSort(int [] arr,int left, int right) {
	   int key=arr[left];
	   while(left<right) {
		   while(key<=arr[right]&&left<right) {
			   right--;
		   }
		   arr[left]=arr[right];
		   while(key>=arr[left]&&left<right) {
			   left++;
		   }
		   arr[right]=arr[left];
	   }
	   arr[left]=key;
	   return left;
   }
   
   public static void kspx(int [] arr,int left,int right) {
	   if(left<right) {
		   int index=quickSort(arr, left, right);
		   kspx(arr, left, index);
		   kspx(arr, index+1, right);
	   }
   }
   
}

6、归并排序

package test.allSort;

import java.util.Arrays;

/**
 * @author Mrqian
 * @time  2018-12-25
 * 归并排序
 * */
public class MergeSort {

	public static void main(String[] args) {
		  int [] arr= {1,5,8,2,7,257,853,7,357,537,687,36,73,47};
		  int [] newarr=new int[arr.length];
		  guibing(arr, 0, arr.length-1, newarr);
		  System.out.println(Arrays.toString(arr));

	}
	public static void guibing(int [] arr,int left, int right,int [] newarr) {
		if(left<right) {
		    int mid=(left+right)/2;
			guibing(arr, left, mid, newarr);
			guibing(arr, mid+1, right, newarr);
			merge(arr, left, mid, right, newarr);
			
		}
	}
	public static void merge(int [] arr,int left, int mid,int right,int [] newarr) {
		int m=left;int x=mid;
		int n=mid+1;int y=right;
		int index=0;
		while(m<=x&&n<=y) {
			if(arr[m]<arr[n]) {
				newarr[index++]=arr[m++];
			}else {
				newarr[index++]=arr[n++];
			}
		}
		while(m<=x) {
			newarr[index++]=arr[m++];
		}
		while(n<=y) {
			newarr[index++]=arr[n++];
		}
		for(int i=0;i<index;i++) {
			arr[i+left]=newarr[i];
		}
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_43823423/article/details/85248011
今日推荐