当前位置:   article > 正文

java中的排序与二维数组_java二维数组排序

java二维数组排序

目录

一、排序

1.排序基础:

2.冒泡排序:

4.插入排序

5.系统提供的排序

二、二维数组

二维数组的基本操作:

二维数组的创建方式:

不规则列:

三、杨辉三角:


一、排序

1.排序基础:

通过中间变量进行判断来交换两个变量的值

如:int a=2;

       int b=8;

        int t=a;

             a=b;

             b=t;

2.冒泡排序:

通过数组中的相邻元素两两比较,大的放右边,比较完一轮,最右边可确认为所有元素中的最大值,然后又从第一个元素开始两两比较,确定了几个元素,比较的次数也减少几次

比如第一轮,确定一个元素比较了10次,第二轮的话只需要比较9次就行,因为最后那个是所有中的最大的。第三轮 8次 因为有两个元素已经确定了

由此可知   需要两个for循环 ,外围for循环控制轮数,内部for循环控制每轮比较的次数

案例:

  1. //冒泡排序:相邻元素两两比较;大的放右边,比较完一轮则确定最右边的数最大;
  2. //以此类推,共比较(长度-1)轮
  3. //分析:1.画图分析排序规则 2.编写代码分析规律
  4. int[] a = {3,1,5,2};
  5. for(int i=0;i<a.length-1;i++) { //外层确定轮(行)数
  6. for(int j=0;j<a.length-1-i;j++) { //内层确定每轮比较的次数(冒泡-次数递减)
  7. if(a[j]>a[j+1]) { //相邻两数的比较
  8. int t = a[j];
  9. a[j] = a[j+1];
  10. a[j+1] = t;
  11. }
  12. }
  13. System.out.println("第"+(i+1)+"轮:"+Arrays.toString(a));
  14. }

3.选择排序:

假定第一个元素最小,然后与后面的元素依此比较,如果后面的元素的值比第一个元素还小,那么让他们的值进行交换,经过一轮比较之后第一个元素的值是最小的,然后从第二个开始比较第二个后面的那些元素

案例:

  1. int[] a = {3,1,5,2};
  2. for(int i=0;i<a.length-1;i++) {//外层比较轮数
  3. for(int j=i+1;j<a.length;j++) { //内层确定次数
  4. if(a[i]>a[j]) {//每次的比较都是a[i]和后面的比
  5. int t = a[i];
  6. a[i] = a[j];
  7. a[j] = t;
  8. }
  9. }
  10. System.out.println("第"+(i+1)+"轮:"+Arrays.toString(a)); //每轮的打印
  11. }

4.插入排序

案例:

  1. //第一轮先比较前两个元素;第二轮插入一个元素与第一轮最大的比;
  2. //如果比最大的还要大,直接排下来;否则再和前面的比,以此类推,共比较(长度-1)轮
  3. int[] a = {3,1,5,2,8,4,7,6};
  4. for(int i=0;i<a.length-1;i++) { //比较轮数
  5. for(int j=i+1;j>0;j--) { //倒着进行比较
  6. if(a[j]<a[j-1]){ //如果后一个比前一个小,则交换
  7. int t = a[j];
  8. a[j] = a[j-1];
  9. a[j-1]= t;
  10. }else { //如果插入的元素,比排好序最大的还要大则退出内层循环
  11. break;
  12. }
  13. }
  14. System.out.println(Arrays.toString(a));
  15. }

5.系统提供的排序

  1. public class Test5 {
  2. public static void main(String[] args) {
  3. //系统提供的排序的函数:Arrays.sort
  4. int[] a = {1,3,5,2};
  5. //Arrays.sort(a); //数组排序-系统提供
  6. System.out.println("排序后:"+Arrays.toString(a));
  7. }
  8. }

二、二维数组

概述:一维数组的一维数组,也就是可以看成一维数组的元素又是一维数组

二维数组里面的元素是一维数组

二维数组的定义,可以看成是行长度和列长度的空间定义

在操作时,可看成是行下标和列下标的操作;

二维数组的基本操作:

通过二维数组的长度进行循环来得到一维数组的里面的元素

  1. //定义一个整数类型的二维数组
  2. //和一维数组类似,创建空间,有默认值:int-0 String-null double-0.0,,,
  3. int[][] a = new int[2][3]; //创建2行3列的二维数组空间---默认值为0
  4. a[0][0] = 60;
  5. a[0][1] = 30;
  6. a[1][0] = 50;
  7. //a[2][0] = 40; //下标越界-行下标越界
  8. //a[0][3] = 90; //下标越界-列下标越界
  9. System.out.println("行长度:"+a.length);
  10. System.out.println("列长度:"+a[0].length);
  11. for(int i=0;i<a.length;i++) { //外层代表行
  12. for(int j=0;j<a[i].length;j++) { //内层代表列
  13. System.out.print(a[i][j]+" ");
  14. }
  15. System.out.println(); //回车
  16. }

二维数组的创建方式:

  1. //二维数组创建方式:
  2. //--------动态赋值----------
  3. int[][] a;
  4. a = new int[2][3]; //1.先声明,再创建空间
  5. int[][] b = new int[2][3]; //2.声明的同时创建空间
  6. int[][] c = new int[2][]; //3.先创建行空间,再创建列空间
  7. c[0] = new int[]{1,3,5};
  8. c[1] = new int[]{2,4,6};
  9. //--------静态赋值----------
  10. int[][] d = {{1,3,5},{2,4,6}}; //2行3列的二维数组

不规则列:

二维数组中,行是固定的,但是列可以不规则;不规则列相对用得特别少,因为赋值和取值较麻烦,可读性也会更差

案例:

  1. //不规则列的二维数组:
  2. //1.先创建行空间的方式
  3. /*
  4. int[][] a = new int[2][]; //确定行长度
  5. a[0]=new int[]{1,3}; //第一行2列
  6. a[1]=new int[]{2,4,6}; //第二行3列
  7. */
  8. //2.静态赋值的方式
  9. int[][] a = {{1,2},{3,5,9}};
  10. //a[0][2] = 5; //下标越界
  11. //循环遍历取值:
  12. for(int i=0;i<a.length;i++) {
  13. for(int j=0;j<a[i].length;j++) {
  14. System.out.print(a[i][j]+" ");
  15. }
  16. System.out.println(); //回车
  17. }

三、杨辉三角:

第一列为1  每一行的最后一个元素为1

其余元素为它上一个元素加它上一个元素左侧元素的和

案例:

  1. public static void main(String[] args) {
  2. //杨辉三角:
  3. /*
  4. * 1
  5. * 1 1
  6. * 1 2 1
  7. * 1 3 3 1
  8. * 1 4 6 4 1
  9. * 1 5 10 10 5 1
  10. *
  11. * 规则:行和列结构
  12. * 第1列都为1,行列相等位置为1;
  13. * 其余的当前位置=上一个+上一个左侧
  14. *
  15. * */
  16. System.out.println("请输入杨辉三角的长度:");
  17. Scanner sc = new Scanner(System.in);
  18. int length = sc.nextInt();
  19. int[][] a = new int[length][length]; //初始都为0
  20. yangHui(a); //杨辉三角的赋值
  21. print(a); //打印
  22. }
  23. private static void print(int[][] a) {
  24. for(int i=0;i<a.length;i++) {
  25. for(int j=0;j<=i;j++) {
  26. System.out.print(a[i][j]+" ");
  27. }
  28. System.out.println(); //回车
  29. }
  30. }
  31. private static void yangHui(int[][] a) {
  32. for(int i=0;i<a.length;i++) {
  33. for(int j=0;j<=i;j++) { //直角三角形的循环次数
  34. if(j==0||i==j) {//第1列和i,j相等,则为1
  35. a[i][j]=1;
  36. }else {
  37. //当前位置=上一个+上一个左边
  38. a[i][j]=a[i-1][j]+a[i-1][j-1];
  39. }
  40. }
  41. }
  42. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号