Java学习第十一天——排序方法(一)

一,算法之排序方法

1.1 冒泡排序

相邻的两个数排序

 

1.2 选择排序

每一轮定义一个基准值,都寻找一个较小的值放在基准值上,

定义一个k,记录基准值的下标,

再依次排序出次之小的。

int arr[ ]={7.23.8.10.15};

//i=0,1,2,3,4表示轮数

//外层循环控制轮数

for(int i=0;i<arr.length-1;i++){

int k = i;

//内层控制交换,依次比较a[k],

for(int j = k + 1;j < arr.length;j++){

//比较a[k]和a[j],若前者大于后者,则把a[j]的值赋给a[k],

if(arr[k] > arr[j]){

k=j;

}

}

//交换arr[0]和arr[k]

if(k! == i){

int temp = arr[i];

arr[i] = arr[k];

arr[k]=temp;

}

}

//打印输出排序后的数组结果

for(int e : arr){

System.out.println(e);

}

 

二 工具类(根据使用情况使用)

1 输入输出流 Scanner();

2 排序(数组) Arrays.sort(a);

3 二分查找 int res = Array.binarySeach(a,18);

System.ou.println()res;

 

三 java文档的查看

 

 

四 数组的复制

复制方式

1.for循环复制;for循环的引用类型的拷贝属于浅拷贝。

2.clone复制

3.System.arraycopy复制

4.Arrays.copyof复制

数组的特点:一经创建,长度不可变。

 

 

int a []={1,2,3};

方法1;元素类型[] 变量名 = Arrays.copyOf(src,newLength);

 

src:源数组,即被复制的数组名

 

newLength:新数组的长度

 

功能解释:从src的下标为0的元素开始复制,复制到长度为newLength的新数组中,

新数组存放的元素的开始位置为0;

 

方法二;

static void m3() {

int[] arr1= {1,5,8,7,4};

int[] arr2=new int[4];

//方法二: System.arraycopy(src, srcPos, dest, destPos, length)

//src: 源数组

//srcPos: 从源数组复制数据的起始位置

//dest: 目标数组

//destPos: 复制到目标数组的启始位置

//length: 复制的长度 这个长度是原数组的长度

System.arraycopy(arr1, 1, arr2, 1, 3);

for (int i = 0; i < arr2.length; i++) {

System.out.println(arr2[i]);

}

}

注;System.arraycopy()不会进行自动包装和自动拆包,因此两个数组必须是同类型或者可以转换为同类型的数组。

同时,这个方法也可以用于复制数组本身。    

    int[] test ={0,1,2,3,4,5,6};

        System.arraycopy(test,0,test,3,3);

        则结果为:{0,1,2,0,1,2,6};

 

 

五 二维数组

5.1概念;

数组的数组;二维数组的每一个元素是一个一维数组

Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

arr[0] 第一行的一维数组,要注意操作时可以对每行数组进行操作,而不用对整体。

arr[1][3] 第二行第四列的元素

 

类比法来理解;(以香烟为例)

一根 变量

一盒 20根 一维数组

一条 10包 20根 二维数组

 

5.2定义格式

数据类型[][] 变量名 = new 数据类型[长度1][长度2];

数据类型[][] 变量名 = {{1.2},{2.3.4},{5.6.7.8.9}};

 

5.3初始化方式

动态初始化:

 

数据类型[][] 变量名 = new 数据类型[长度1][长度2];

 

静态初始化:

 

数据类型[][] 变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..};

//定义了一个二维数组

int[][] arr = new int[3][4];

arr[1][1] = 100;

System.out.println("二维数组的长度:"+ arr.length); // 3

System.out.println("二维数组的长度:"+ arr[1].length); //

5.4 注;

Java语言中,把二维数组看作是数组的数组,数组空间不是连续分配的。

所以不要求二维数组每一维的大小相同。

即int[][] array=new int[][]{{1},{2,3},{4,5,6},{7,8,9,10}};中

每一个一维数组的长度可以不相同。

5.5从最高维开始,分别为每一维分配空间,例如:

String a[][] = new String[2][];

a[0] = new String[2];

a[1] = new String[3];

a[0][0] = new String("Good");

a[0][1] = new String("Luck");

a[1][0] = new String("to");

a[1][1] = new String("you");

a[1][2] = new String("!");

 

a[0] = new String[2] 和 a[1]=new String[3] 是为最高位分配引用空间,

也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间

 a[0][0] = new String("Good") 等操作

5.6 二维数组的遍历需要使用两重for循环

for(int i = 0; i < arr.length; i++){ //遍历二维数组,遍历出来的每一个元素都是一个一维数组

for(int j = 0; j < arr[i].length; j++){ //遍历对应下标上的一维数组

System.out.println(arr[i][j]);

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值