LInk:【01】Java程序基本结构、表达式、语句与运算符 --> https://www.cnblogs.com/discoverspace/p/11509577.html
1.数组概念
1.1数组用一个标识符和下标来表示,下标可以区分数组中不同的元素。如果一个数组只有一个下标,则称为一维数组。有两个下标,则为二维数组。一般只用到三维数组,而一维和二维数组较常用。
数组是一种引用类型,在内存中数组元素和数组变量是分开存放的,其中引用变量存储在栈内存中(stack),数组元素则是在堆内存(heap)中。
数组是一种基本数据结构,用来顺序存储同一类型值的集合。
1.2创建并初始化数组
声明数组的名字和类型、创建数组、初始化数组元素。完整写法略。
简化写法:
1 int a[]=new int [100];
1.3数组别名
数组名表示整个数组,如果将一个数组的变量赋予另一个变量,那么两个变量将会指向同一个数组。
1 int a[]=new int[100]; 2 a[1]=102; 3 int b[]=a; 4 b[1]=2;
此时a[1]的值也变为2。
2.数组的排序
2.1冒泡排序:对于一组包含n个数据的一组记录,最坏的情况要进行n-1个排序。
每次排序都会把最大的数固定出来放在最后,固定后的数就不再参与下一次排序了。
1 import java.util.Scanner; 2 public class 冒泡排序 { 3 public static void bubbleSort(int []data,int len) 4 { 5 for(int i=0;i<len-1;i++) 6 { 7 boolean flag=false; 8 for(int j=0;j<len-1-i;j++) 9 { 10 if(data[j]>data[j+1]) 11 { 12 int temp=data[j]; 13 data[j]=data[j+1]; 14 data[j+1]=temp; 15 flag=true; 16 } 17 } 18 if(!flag)//未发生交换,已经有序 19 break; 20 } 21 } 22 public static void main(String[] args) { 23 Scanner cin=new Scanner(System.in); 24 while (cin.hasNext()) { 25 int n = cin.nextInt(); 26 int a[] = new int[n]; 27 for (int i = 0; i < n; i++) { 28 a[i] = cin.nextInt(); 29 } 30 bubbleSort(a,n); 31 for(int i:a){ //for-each循环 32 System.out.println(i); 33 } 34 } 35 } 36 }
2.2快速排序(重要!):二分思想,在一组数据中取一个数据(如第一个)作为分界值,所有比分界值小的数放到左边,比分界值大的放在右边,得到两个子序列,两个子序列分别再进行排序,直到左右只剩一个数为止。
完整代码:
import java.util.Scanner; public class 快速排序 { public static void quickSort(int[] data,int start,int end) { int i=start;int j=end; if(i>=j)//退出条件 return; boolean flag=true;//true表示从右至左搜索,false表示从左至右搜索 while (i!=j)//直到相遇停止,意味这一轮交换完成 { if(data[i]>data[j]) { int temp=data[i]; data[i]=data[j]; data[j]=temp; flag=!flag;//有交换则改变flag,这决定下一次ij改改变谁(搜索往哪个方向走) } if(flag) j--; else i++; } i--;j++;//递归,二分思想,分别对ij左右两侧再次重复 quickSort(data,start,i); quickSort(data,j,end); } public static void main(String[] args) { Scanner cin=new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) { a[i] = cin.nextInt(); } quickSort(a,0,n-1); for(int i:a){ //for-each循环 System.out.println(i); } } } }