Arrays类、冒泡排序和稀疏数组
一、Arrays类的定义
Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法
使用时导包:import java.util.Arrays
二、Arrays常用函数(都是静态的)
1.void Arrays.sort()
void Array.sort(Object[] array)
功能:对数组按照升序排序
int[] nums = {2,5,0,4,6,-10};
Arrays.sort(nums);
for(int i :nums)
System.out.print(i+" ");
/* 之前:2 5 0 4 6 -10
* 结果:-10 0 2 4 5 6
*/
Arrays.sort(Object[] array, int from, int to)
功能:对数组元素指定范围进行排序(排序范围是从元素下标为from,到下标为to-1的元素进行排序)
示例
int[] nums = {2,5,0,4,1,-10};
//对前四位元素进行排序
Arrays.sort(nums, 0, 4);
for(int i :nums)
System.out.print(i+" ");
/* 之前:2 5 0 4 1 -10
* 结果:0 2 4 5 1 -10
*/
2.Arrays.fill(Object[] array,Object object)
功能:可以为数组元素填充相同的值
int[] nums = {2,5,0,4,1,-10};
Arrays.fill(nums, 1);
for(int i :nums)
System.out.print(i+" ");
/* 之前:2 5 0 4 1 -10
* 结果:1 1 1 1 1 1
*/
Arrays.fill(Object[] array,int from,int to,Object object)
功能:对数组的部分元素填充一个值,从起始位置到结束位置,取头不取尾
int[] nums = {2,5,0,4,1,-10};
//对数组元素下标2到4的元素赋值为3
Arrays.fill(nums,2,5,3);
for(int i :nums)
System.out.print(i+" ");
/* 之前:2 5 0 4 1 -10
* 结果:2 5 3 3 3 -10
*/
3.Arrays.toString(Object[] array)
功能:返回数组的字符串形式
示例
int[] nums = {2,5,0,4,1,-10};
System.out.println(Arrays.toString(nums));
/*
* 结果:[2, 5, 0, 4, 1, -10]
*/
4.Arrays.deepToString(Object
功能:返回多维数组的字符串形式
示例
int[][] nums = {{1,2},{3,4}};
System.out.println(Arrays.deepToString(nums));
/*
* 结果:[[1, 2], [3, 4]]
*/
Array的典例
package methods;
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int[] a = {1,4,3,369,196,888,35,31,6};
System.out.println(a); //[I@4e8a88a9
//打印数组元素
System.out.println(Arrays.toString(a));
System.out.println("===================================");
//printArray(a);
Arrays.sort(a); //数组进行排序:升序
System.out.println(Arrays.toString(a));
Arrays.fill(a,2,4,0);
System.out.println(Arrays.toString(a));
}
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
if(i==0){
System.out.print("[");
}
if(i==a.length-1){
System.out.print(a[i]+"]");
}else{
System.out.print(a[i]+", ");
}
}
}
}
二:冒泡排序
排序结果:数据从小到大。
首先说一下冒泡排序的思想:每次比较从第一个数据开始,数据两两比较,如果左边数据比右边数据大,则交换左右数据。继续比较。一次比较结束出现一个最大值在最后一个位置。
思想就是代码的体现,掌握思想写代码66的。
我以5个数据为例集合冒泡排序的思想进行图解说明。 数据为 8、5 、2 、6 、1。 第一次比较过程如下:
简单说明: 每次比较从第一个数据开始,也就是8开始。数据两两比较,也就是8和5进行比较。如果左边数据比右边数据大,则交换左右数据,也就是8比5大,8和5的位置交换。继续比较,也就是交换位置后,8继续和后面的数据比较。当最大值8出现在了最后一个位置时,第一次比较结束。当下一次比较,8已经是最大值就没必要参与比较。
第二次比较过程如下:
简单说明:第二次比较过程和第一次比较过程是一致的,第二次比较最大值6出现在最后一个位置。下一次比较,最大值6不参与比较。
第三次比较过程如下: 简单说明:第三次比较最大值5出现最后一个位置,下次比较,5不参与比较。
第四次比较过程如下:
简单说明:第四次比较最大值2出现最后一个位置。至此,所有数据排序过程结束。
思路总结
一、冒泡排序:
利用冒泡排序对数组进行排序
二、基本概念:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
三、实现思路:
用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n-1,对于每一个i,j的值依次为0,1,2,...n-i 。
冒泡排序的典例
package methods;
import java.util.Arrays;
public class mpDemo {
// 冒泡排序
// 1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换位置
// 2.每一次比较,都会产生出一个最大,或者最小的数字
// 3.下一轮则可以少一次排序
// 4.依次循环,直到结束!
public static void main(String[] args) {
int[] a = {1,4,3,369,196,888,35,31,65};
int[] sort = sort(a); //调用完我们自己写的排序方法后,返回一个排序后的数组
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
//临时变量
int temp = 0;
//外层循环,判断我们这个循环要走多少次
for (int i = 0; i < array.length-1; i++) {
boolean flag = false; //通过flag标识位减少没有意义的比较
//内层循环,比较判断两个数,如果第一个数比第二个数小,则交换位置
for (int j = 0; j < array.length-1-i; j++) {
if(array[j+1]<array[j]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
}
if(flag == false){
break;
}
}
return