补充练习
1. 打印如下形状:
/*
* *
* * *
* * * *
* * * * *
* * * * * *
*/
package test;
public class Demo {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
for(int j = i; j < 4; j++) {
System.out.print(" ");
}
for(int k = 0; k <= i; k++) {
System.out.print("* ");
}
System.out.println();
}
}
}
2. 遍历数组
package test;
/**
* 遍历数组
* @author 14251
*
*/
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
for(int i = 0; i < arr.length; i++) {
if(i != arr.length-1) {
System.out.print(arr[i] + ",");
}else {
System.out.println(arr[i]);
}
}
}
}
3. 排序算法:选择排序、冒泡排序
package test;
public class Demo2 {
public static void main(String[] args) {
int[] arr = new int[]{3, 5, 1, 9, 10, 0, 4, 8};
// selectSort(arr);
bubbleSort(arr);
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
//选择排序
public static void selectSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {//最后一项不需要比较
for(int j=i+1; j<arr.length; j++) {
if(arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//冒泡排序
public static void bubbleSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {//控制每轮少比较的数值的个数
for(int j=0; j<arr.length-i-1; j++) {//-i是因为每轮确定一个最大值放到最后,下轮少比较一个数值
//arr最大角标为j+1, j+1 < arr.length-i -> j < arr.length-i-1
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
/*冒泡排序
public static void bubbleSort(int[] arr) {
for(int i=arr.length-1; i>0; i--) {
for(int j=0; j<i; j++) {//j+1 < arr.length -> j < arr.length-1 -> j<i
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
*/
4. 折半查找
package test;
public class Demo3 {
public static void main(String[] args) {
int[] arr = new int[]{3, 5, 1, 9, 10, 0, 4, 8};
Demo2.bubbleSort(arr);//查找之前先要保证数组元素有序
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
System.out.println(getNum(arr, 3));
System.out.println(getNum(arr, 15));
}
//折半查找
public static int getNum(int[] arr, int key) {
int min = 0;
int max = arr.length-1;
int mid = (min + max) / 2;
//写法1
while(true) {
if(min > max) {
return -1;//结束方法
}
if(arr[mid] < key) {
min = mid + 1;
}else if(arr[mid] > key){
max = max - 1;
}else {
return mid;
}
mid = (min + max) / 2;
}
// //写法2
// while(arr[mid] != key) {
// if(arr[mid] < key) {
// min = mid + 1;
// }else if(arr[mid] > key) {
// max = mid - 1;
// }
// mid = (min + max) / 2;
// if(min > max) {
// return -1;
// }
// }
// return mid;
// }
// //写法3
// while(min <= max) {
// mid = (min + max) / 2;
// if(key > arr[mid]) {
// min = mid + 1;
// }else if(key < arr[mid]){
// max = mid - 1;
// }else {
// return mid;
// }
// }
// return -1;
}
}
5. 将元素插入数组,保证插入之后的数组有序,返回插入位置
package test;
public class Demo4 {
public static void main(String[] args) {
int[] arr = new int[]{0, 1, 3, 4, 5, 7, 8, 11, 13};
int index = insertNum(arr, 6);
System.out.println(index);
}
//将元素插入数组,并要保证插入之后的数组有序,求该插入位置
public static int insertNum(int[] arr, int key) {
int min = 0, max = arr.length-1, mid;
mid = (min + max) / 2;
while(arr[mid] != key) {
if(arr[mid] < key) {
min = mid + 1;
}else if(arr[mid] > key) {
max = mid - 1;
}
mid = (min + max) / 2;
if(min > max) {
return min;
}
}
return mid;
}
}
6. 对数组操作的工具类
package test;
/**
* 对数组操作的工具类
* @author 14251
*
*/
public class ArrayTool {
//构造函数私有化,防止实例化对象
private ArrayTool() {}
//遍历数组
public static void printArray(int[] arr) {
for(int i=0; i<arr.length; i++) {
if(i != arr.length-1) {
System.out.print(arr[i] + ",");
}else {
System.out.println(arr[i]);
}
}
}
//获取最大值
public static int getMax(int[] arr) {
int max = 0;
for(int i=1; i<arr.length; i++) {
if(arr[i] > arr[max]) {
max = i;
}
}
return max;
}
//获取最小值
public static int getMin(int[] arr) {
int min = 0;
for(int i=1; i<arr.length; i++) {
if(arr[i] < arr[min]) {
min = i;
}
}
return min;
}
//选择排序
public static void selectSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=i+1; j<arr.length; j++) {
if(arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
//冒泡排序
public static void bubbleSort(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=0; j<arr.length-i-1; j++) {
if(arr[j] > arr[j+1]) {
swap(arr, j, j+1);
}
}
}
}
//置换
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//折半查找
public static int searchNum(int[] arr, int key) {
bubbleSort(arr);
int min = 0;
int max = arr.length-1;
int mid = (min + max)/2;
while(arr[mid] != key) {
if(arr[mid] < key) {
min = mid + 1;
}else if(arr[mid] > key) {
max = mid - 1;
}
mid = (min + max)/2;
if(min > max) {
return -1;
}
}
return mid;
}
}
package test;
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{6, 25, 8, 13, 2, 7, 34, 1, 9, 0};
System.out.println(arr[ArrayTool.getMin(arr)]);
System.out.println(arr[ArrayTool.getMax(arr)]);
System.out.println(ArrayTool.searchNum(arr, 7));
ArrayTool.bubbleSort(arr);
ArrayTool.printArray(arr);
}
}