int[] arr=new int[10];
double arr2[]=new double[10];
int[] arr=new int[]{10,20,30,40};
//简写方法
double[] arr={3.14,2,56,48};
public static void main(String[] args) {
int[] arr={10,80,50,4,5,6};
for(int i=0;i<arr.length/2;i++) {
int temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
System.out.println(Arrays.toString(arr));
}
数据类型[][] 变量名= new 数据类型[m][n];
m:二维数组有多少个一维数组
n:每个一维数组的元素个数
其他格式;
a:数据类型 数组名[][]=new 数据类型[m][n];
b:数据类型 数组名[][]=new 数据类型[m][n];
public static void main(String[] args) {
int[][] arr=new int[3][4];
System.out.println(arr);//输出二维数组的地址
System.out.println(arr[0]);//输出一维数组的地址
System.out.println(arr[1]);
//给二维数组里面的每个元素
int[][] arr2=new int[][]{{20,62,4},{80,30,95},{10,101}};
//输出最后一个元素的索引=数组的长度-1
System.out.println(arr[arr.length-1][arr[arr.length-1].length-1]);
}
public static void main(String[] args) {
int[] array={10,15,78,96,45,2,16};
int index=getIndexByEle(array,2);
System.out.println(index);
}
private static int getIndexByEle(int[] array,int ele) {
for(int i=0;i< array.length;i++) {
if(ele==array[i]) {
return i;
}
}
//没有找到返回-1
return -1;
}
package 数组;
import java.util.Scanner;
public class 二分查找 {
public static void main(String[] args) {
//二分查找,数组必须有顺序,否则,使用普通查找
int[] array={10,20,30,40,50,60,70,80,90};
System.out.println("请输入你要查找的数字【10~100的整十的整数】:");
Scanner scanner=new Scanner(System.in);
int ele= scanner.nextInt();
scanner.close();
int index=getIndexByEle(array,ele);
if(index==-1) {
System.out.println("不好意思,没有这个元素");
}
else {
System.out.println("元素的索引为:"+index);
}
}
private static int getIndexByEle(int[] array, int ele) {
int minIndex=0;
int maxIndex= array.length-1;
int centerIndex=(minIndex+maxIndex)/2;
while (minIndex<=array[maxIndex]) {
if(ele==array[centerIndex]) {
return centerIndex;
}
else if(ele<array[centerIndex]) {
maxIndex= centerIndex-1;
}
else if(ele>array[centerIndex]) {
minIndex=centerIndex+1;
}
//需重新计算centerIndex的值
centerIndex=(minIndex+maxIndex)/2;
}
//找不到返回-1
return -1;
}
}
排序原理:数组元素两两比较,交换位置,大元素往后放,那么经过一轮比较后,最大的元素,就会出现在最大索引处。
package 数组;
import java.util.Arrays;
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] array={1,15,14,88,99,75,65,999};
for(int i=1;i<array.length;i++) {
boolean flag=false;
for(int j=0;j<array.length-i;j++) {
if(array[j]>array[j+1]) {
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
if(!flag) {
continue;
}
}
}
System.out.print(Arrays.toString(array));
/*for(int i:array) {
System.out.print(i+"\t");
}*/
}
}
package 数组;
import java.util.Arrays;
//选择排序
public class SelectSort {
public static void main(String[] args) {
//选择排序原理:从0索引处开始,依次和后面的元素进行比较,
// 小的元素往前放,经过一轮比较后,最小的元素就出现在了最小索引处
int[] arr={66,88,55,77,99,11};
for (int index = 0; index < arr.length; index++) {
for (int i = index+1; i < arr.length; i++) {
if(arr[index]>arr[i]) {
int temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
package 数组;
import java.util.Arrays;
//插入排序
public class InsertSort {
public static void main(String[] args) {
int[] arr={14,89,23,45,87,12,56};
for (int i = 1; i < arr.length; i++) {
for(int j=i;j>0;j--) {
if(arr[j-1]>arr[j]) {
int temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
package 数组;
import java.util.Arrays;
//希尔排序
public class ShellsSort {
public static void main(String[] args) {
//希尔排序思想--快速排序的优化,合理的选取这个增量
//第一次这个增量选取数组长度的一半,然后不断减半
int[] arr={78,56,12,23,88,50,64,25,78,40,63};
for(int h=arr.length/2;h>0;h/=2) {
for(int i=h;i<arr.length;i++) {
for(int j=i;j>h-1;j-=h) {
if(arr[j]<arr[j-h]) {
swapValue(arr,j,j-h);
}
}
}
}
System.out.println(Arrays.toString(arr));
}
public static void swapValue(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
package 数组;
//希尔排序
public class ShellSort2 {
public static void main(String[] args) {
//克努特序列
//h=1
//h=h*3+1 1,4,13,40,121,364
int[] arr={78,56,12,23,88,50,64,25,78,40,63};
int interval=1;
while(interval<=arr.length/3) {
interval=interval*3+1;
}
for(int h=interval;h>0;h=(h-1)/3) {
for(int i=h;i< arr.length;i++) {
for(int j=i;j>h-1;j-=h) {
if(arr[j]<arr[j-h]) {
swapValue(arr,j,j-h);
}
}
}
}
for(int x:arr) {
System.out.print(x+"\t");
}
}
public static void swapValue(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
package 数组;
import java.util.Arrays;
//快速排序 挖坑填数
public class QuickSort {
public static void main(String[] args) {
//定义一个数组
int[] arr={13,15,78,-1,22,21,100,56,36,46,98};
//调用方法,进行快速排序,传入数组,传入起始位置,传入结束位置
Quicksort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void Quicksort(int[] arr, int start, int end) {
if(start<end) {
int index=getIndex(arr,start,end);
Quicksort(arr,start,index-1);
Quicksort(arr,index+1,end);
}
}
/*
* 将基准数挖出形成第一个坑
*有后向前找比它小的数,找到后挖出此数填到前一个坑中
* 有前向后找比它大的数,找到后挖出此数填到前一个坑中
* 再重复执行2,3步骤。
* */
private static int getIndex(int[] arr, int start, int end) {
int i=start;
int j=end;
int x=arr[i];
while(i<j) {
//有后向前找比它小的数,找到后挖出此数填到前一个坑中
while(i<j && arr[j]>=x) {
j--;
}
if(i<j) {
arr[i]=arr[j];
i++;
}
//有前向后找比它大的数,找到后挖出此数填到前一个坑中
while(i<j && arr[i]<x) {
i++;
}
if(i<j) {
arr[j]=arr[i];
j--;
}
}
arr[i]=x;//将基准数填入最后一个坑中
return i;
}
}
package 数组;
import java.util.Arrays;
//归并排序
public class MergeSort {
public static void main(String[] args) {
int[] arr={10,20,8,2,-20,-15,55,99,30};
//拆分
split(arr,0, arr.length-1);
//归并
merge(arr,1,arr.length/2,arr.length-1);
//输出数组
System.out.println(Arrays.toString(arr));
}
private static void split(int[] arr, int startIndex, int endIndex) {
//计算中间数组
int centerIndex=(startIndex+endIndex)/2;
if(startIndex<endIndex) {
split(arr,startIndex,centerIndex);
split(arr,centerIndex+1,endIndex);
merge(arr,startIndex,centerIndex,endIndex);
}
}
private static void merge(int[] arr, int startIndex, int centerIndex, int endIndex) {
//定义一个临时数组
int[] tempArr=new int[endIndex-startIndex+1];
//定义左边数组的起始索引
int i=startIndex;
//定义右边数组的起始索引
int j=centerIndex;
//定义临时变量数组的起始索引
int index=0;
//比较左右两个数组的元素大小,往临时数组中放
while(i<centerIndex && j<endIndex) {
if(arr[i]<=arr[j]) {
tempArr[index]=arr[i];
i++;
}else {
tempArr[index]=arr[j];
j++;
}
index++;
}
//处理剩余元素
while(i<=centerIndex) {
tempArr[index]=arr[i];
i++;
index++;
}
while(j<endIndex) {
tempArr[index]=arr[j];
j++;
index++;
}
//将临时数组的值取到原数组
if (tempArr.length >= 0) System.arraycopy(tempArr, 0, arr, startIndex, tempArr.length);
}
}
package 数组;
import java.util.Arrays;
//温馨提示:此排序方法不可以对负数进行排序
//基数排序:通过分配再收集的方式进行排序
public class RadixSort {
public static void main(String[] args) {
int[] arr={1,5,21,32,444,545,124,903,9999};
//确定排序轮次
//基数排序
sortArray(arr);
//输出排序后的数组
System.out.println(Arrays.toString(arr));
}
private static void sortArray(int[] arr) {
//定义二维数组,放10个桶
int[][] tempArr=new int[10][arr.length];
//定义统计数组
int[] counts=new int[10];
//获取数组中的最大值
int max=getMax(arr);
//获得循环次数,==最大值的位数
int len=String.valueOf(max).length();
//循环轮次
for(int i=0,n=1;i<len;i++,n*=10) {
for(int j:arr) {
//获取每个位上的数字
int bitValue=j/n%10;
tempArr[bitValue][counts[bitValue]++]=j;
}
//取出桶中的元素
int index=0;
for(int k=0;k<counts.length;k++) {
if(counts[k]!=0) {
for(int h=0;h<counts[k];h++) {
//从桶中取出元素放回原数组
arr[index]=tempArr[k][h];
index++;
}
counts[k]=0;//清除上一次统计的数组
}
}
}
}
private static int getMax(int[] arr) {
int temp=arr[0];
for(int x:arr) {
if(temp<x) {
temp=x;
}
}
return temp;
}
}
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序
package 数组;
import java.util.Arrays;
//堆排序
public class HeapSort {
public static void main(String[] args) {
//定义一个数组
int[] arr={1,0,6,7,2,3,4};
//调整成大顶堆的方法
//定义开始调整的位置
int startIndex=(arr.length-1)/2;
//循环开始调
for(int i=startIndex;i>=0;i--) {
toMaxHeap(arr,arr.length,i);
}
//经过上面的操作后,已经把数组变成一个大顶堆,把根元素和最后一个元素进行调换
for(int i=arr.length-1;i>0;i--) {
int temp=arr[0];
arr[0]=arr[i];
arr[i]=temp;
//换完之后,再把剩余的元素调成大队堆
toMaxHeap(arr,i,0);
}
System.out.println(Arrays.toString(arr));
}
/**
*
* @param arr 要调整的数组
* @param size 调整的元素个数
* @param index 从哪里开始调整
*/
private static void toMaxHeap(int[] arr, int size, int index) {
//获取左右子节的索引
int leftNodeIndex=index*2+1;
int rightNodeIndex=index*2+2;
//查找最大节点所对应的索引
int maxIndex=index;
//leftNodeIndex
if(leftNodeIndex<size && arr[leftNodeIndex]>arr[maxIndex]) {
maxIndex=leftNodeIndex;
}
if(rightNodeIndex<size && arr[rightNodeIndex]>arr[maxIndex]) {
maxIndex=rightNodeIndex;
}
//来调换位置
if(maxIndex!=index) {
int temp=arr[maxIndex];
arr[maxIndex]=arr[index];
arr[index]=temp;
//调换完之后,可能会影响到下面的子树,不是大顶堆,所以还需要再次调换
toMaxHeap(arr,size,maxIndex);
}
}
}