目录
冒泡排序
思路分析:
1.冒泡排序的思想是相邻的两个数进行比较,如果第一个数比第二数大的话,那么就交换
2.定义一个旗帜flag 如果本身的数组一直都是有序的,那么 可以增加了效率
3.交换两个元素可以用异或的操作,这样不需要创建第三个变量,减少内存开销。
package com.array;
/**
* 演示冒泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
//创建一个数组
int[] arr = {1, 2, 3, 5, 4, 6, 7, 8, 9, 0};
for (int i = 0; i < arr.length - 1; i++) {
int flag = 1;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// int tmp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = tmp;
//使用异或的方式,可以不创建第三方的变量,减少内存的开销
arr[j + 1] ^= arr[j];
arr[j] ^= arr[j + 1];
arr[j + 1] ^= arr[j];
flag = 0;
}
}
//如果flag没有被修改成1说明这个数组本来就是有序的增加了效率
if (flag == 1) {
break;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
数组拷贝
思路分析:
1.先创建一个和原数组一模一样大小的数组
2.循环的遍历原数组,把原数组的值,拷贝到新数组去
3.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收
4.最后遍历原数组并输出
package com.array;
/**
* 演示数组拷贝
*/
public class arrayCopy {
public static void main(String[] args) {
//创建一个数组
int[] arr1 = {1, 2, 3, 4};
int[] arr2 = new int[arr1.length];//创建一个和arr1一样的数组
for (int i = 0; i < arr2.length; i++) {//把原数组的内容拷贝到新数组去
arr2[i] = arr1[i];
}
arr1 = arr2;//原来数组的指向新数组的,这样原来的数据空间就会被销毁
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
}
}
数组反转
思路分析:
1.先创建一个和原数组想同长度大小的数组
2.使用for循环拷贝,把原数组的最后一个位置的内容,拷贝到新数组的第一个位置去
3.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收
package com.array;
/**
* 演示数组反转
*/
public class arrayReverse {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6};
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr2.length; i++) {//数组拷贝
arr2[i] = arr1[arr1.length - 1 - i];//
}
arr1 = arr2;
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
}
}
数组扩容
思路分析:
1.先创建一个scanner对象用来接受你要扩容的数字
2.创建一个新的数组,大小是比原来数组的大一个的数组
3.使用for循环循环的拷贝原数组的内容到新数组去
4.在要插入的元素,放到新数组的最后一个位置
5.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收
package com.array;
import java.util.Scanner;
/**
* 演示数组扩容
*/
public class arrayAdd {
public static void main(String[] args) {
//创建一个scanner对象接受用户的输入
Scanner scanner = new Scanner(System.in);
//定义一个数组
int[] arr1 = {1, 2, 3};
for (; ; ) {//表示死循环
System.out.print("请输入你要扩容的数:");
int n = scanner.nextInt();//接受要扩容的数
int[] arr2 = new int[arr1.length + 1];//创建一个比原来数组大1的数组
for (int i = 0; i < arr1.length; i++) {//拷贝原来的数组到新数组的内容
arr2[i] = arr1[i];
}
arr2[arr2.length - 1] = n;//把要扩容的数,赋给新数组的最后一个位置
arr1 = arr2;//让原来的数组指向新的数组
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
System.out.print("\n请确认是否继续扩容:");
char c = scanner.next().charAt(0);
if (c == 'y') {
System.out.println("继续扩容");
} else if (c == 'n') {
break;
}
}
}
}
数组缩减
思路分析:
1.创建一个scanner对象,由用户判断是否继续缩减
2.如果用户确定要缩减数组,那么就创建一个比原来数组小一的数组,如果不缩减,那么就直接break
3.在使用for循环进行循环拷贝
4.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收
package com.array;
import java.util.Scanner;
/**
* 演示数组缩减
*/
public class arrayReduce {
public static void main(String[] args) {
//创建一个scanner对象接受用户的输入
Scanner scanner = new Scanner(System.in);
//定义一个数组
int[] arr1 = {1, 2, 3};
for (; ; ) {//表示死循环
System.out.print("请确认是否继续缩减:");
char c = scanner.next().charAt(0);
if (c == 'y') {//表示确定缩减
int[] arr2 = new int[arr1.length - 1];//创建一个比原数组小1的数组
for (int i = 0; i < arr2.length; i++) {//拷贝原来的数组到新数组的内容
arr2[i] = arr1[i];
}
arr1 = arr2;//让原来的数组指向新的数组
if (arr1.length == 0) {//如果数组的长度为0就不可以缩减了直接break
System.out.println("数组长度为0不可以继续缩减了");
break;
}
} else if (c == 'n') {
break;
}
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
}
}
}