1. 冒泡排序
public class DemoArr1 {
public static void main(String[] args) {
int [] arr = {45,656,234,44,6};
int temp;
for(int i = 0; i < arr.length -1; i++) {//轮
for(int j = 0; j < arr.length -1 - i ; j++) {//次
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}
//循环遍历输出
for(int a:arr) {
System.out.println(a);
}
}
}
补充二分查找
public class DemoArr11 {
public static void main(String[] args) {
int [] arr = {5,7,3,1,9};
Scanner superman = new Scanner(System.in);
//冒泡排序
int temp;
for(int i = 0; i < arr.length-1; i++) {
for(int j = 0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j +1];
arr[j+1] = temp;
}
}
}
//二分查找
System.out.println("--输入一个数字:");
int num = superman.nextInt();
int start = 0;
int end = arr.length-1;
int middle = (start + end)/2;
while(arr[middle] != num) {
if(num > arr[middle]) {
start = middle + 1;
}else if(num < arr[middle]) {
end = middle -1;
}
if(start > end) {
middle = -1;
break;
}
middle = (start + end)/2;
}
System.out.println("位置:" + middle);
if(middle == -1) {
System.out.println("不存在");
}else {
System.out.println("存在");
}
}
}
2. 选择排序
public class DemoArr2 {
public static void main(String[] args) {
int [] arr = {543,46,1,657,4};
int temp;
for(int i = 0; i < arr.length -1; i ++) {//位置
for(int j = i + 1; j < arr.length; j++) {//后边元素
if(arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int a : arr) {
System.out.println(a);
}
}
}
3.插入排序
public class DemoArr3 {
public static void main(String[] args) {
int [] arr = {23,90,9,25,16};
int temp;
for(int i = 1; i < arr.length; i++) {//位置
for(int j = 0; j < i; j++) {//前边所有元素
if(arr[i] < arr[j]) {
//存起来
temp = arr[i];
//向后覆盖
for(int k = i; k > j; k--) {
arr[k] = arr[k-1];
}
//覆盖插入
arr[j] = temp;
}
}
}
for(int a :arr) {
System.out.println(a);
}
}
}
4.归并排序
public class MergeSort01 {
public static void main(String[] args) {
int[] arr1={1,2,4,5,7};
int[] arr2={2,4,6,8,10,11};
int[] mergeSort = mergeSort(arr1, arr2);
System.out.println(Arrays.toString(mergeSort));
}
public static int[] mergeSort(int[] arr1,int[] arr2){
//创建一个大数组 存放最终结果的
int[] newarr=new int[arr1.length+arr2.length];
//比较的过程
int m=0; //用于记录arr1的下标
int n=0; //用于记录arr2的下标
int index=0; //用于记录newarr的下标
//只要两个里面都有元素 一直重复比较
while(m<=arr1.length-1 && n<=arr2.length-1){
//arr1<arr2
if(arr1[m]<arr2[n]){
newarr[index++]=arr1[m++];
}else{//arr1>=arr2
newarr[index++]=arr2[n++];
}
}
//说明有一个数组已经没有元素了
//另外一个数组只需要全部过去
while(m<=arr1.length-1){//arr1 还有元素
newarr[index++]=arr1[m++];
}
while(n<=arr2.length-1){//arr2 还有元素
newarr[index++]=arr2[n++];
}
return newarr;
}
}
5.快速排序
public class QuickSort {
public static void main(String[] args) {
int[] arr1={34,56,78,90,12,32,1,23,45,36,36,56};
System.out.println(Arrays.toString(arr1));
quickSortLeft(arr1, 0, arr1.length-1);
System.out.println(Arrays.toString(arr1));
}
/*
* 参数列表:
* int[] 数组 大数组
* int left 小集合的左侧边界
* int right 小集合的右侧边界
*
*/
public static void quickSortLeft(int[] arr,int left,int right){
//找出口
if(left>=right){
return;
}else{
//满足条件
//找分界线的最终位置
int index=getIndex(arr,left,right);
//左侧开始递归
quickSortLeft(arr, left, index-1);
//右侧开始递归
quickSortLeft(arr, index+1, right);
}
}
//获取每一次的分界线的最终位置 仅考虑一个小集合
public static int getIndex(int[] arr, int left, int right) {
//初始化分界线 每一个小数据集的最左测的元素
int key=arr[left];
//循环遍历比较
while(left<right){//外层循环一次 内层循环所有
//先从右向左比较 从右向左获取每一个值 大于分界点 数组下标向前一位 right--
while(arr[right]>=key && left<right){
right--;
}
//出了循环 arr[right]<key 交换位置
arr[left]=arr[right];
//从左向右比较
while(arr[left]<=key && left<right){
left++;
}
//arr[left]》key
arr[right]=arr[left];
}
//出了循环 最终的界限定了 left=right
//给分界点 赋值
arr[left]=key;
return left;
}
}