学习笔记 - 数组的使用
package Shuzu;
public class ArrayDemo2 {
public static void main(String[] args) {
int[] ar = { 4, 9, 1, 5, 3, 7 };
// Arrays.sort(ar);//java中已经定义好的一种排序方式,在开发中使用
// chang(ar);
System.out.println("--------");
// 排序前
chang(ar);
// 排序
// selectSort(ar);
bubbleSort(ar);
// 排序后
System.out.println("========");
chang(ar);
int i = getIndex(ar, 9);
sop(i);
sop("-----");
int ii = halfSearch(ar, 9);
sop(ii);
}
/**
* 折半查找
*/
public static int halfSearch(int[] arr, int key) {
int min = 0,mid;
int max = arr.length - 1;
while (min <= max)
{
mid = (min + max) / 2;
if (arr[mid] < key)
min = mid + 1;
else if (arr[mid] > key)
max = mid - 1;
else
return mid;
}
return -1;
}
/**
* 数组的查找操作 定义功能,获取key第一次出现在数组中的位置,如果返回时-1,那么代表key在数组中不存在
*/
public static int getIndex(int[] arr, int key) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] == key)
return x;
}
return -1;
}
/**
* 冒泡排序
*
* @param ar
*/
public static void bubbleSort(int[] arr) {
for (int x = 0; x < arr.length; x++) {
// 没执行一次,最值就会放在最后面一次
// arr.length-x-1的原因:外面的for循环每执行一次,就会有一个元素排序好了
// -1的原因 arr[y]+arr[y+1] 放置角标越界
for (int y = 0; y < arr.length - x - 1; y++) {
if (arr[y] > arr[y + 1]) {
// int temp = arr[y];
// arr[y] = arr[y+1];
// arr[y+1] = temp;
swap(arr, y, y + 1);
}
}
}
}
/**
* 发现无论什么排序,都需要对满足条件的元素进行位置置换 所以可以把这部分相同的代码提取出来,单独封装成一个函数
*/
public static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void sop(Object obj) {
System.out.println(obj);
}
private static void chang(int[] ar) {
for (int x = 0; x < ar.length; x++) {
System.out.println("ar" + "[" + x + "]:" + ar[x]);
}
}
/**
* 选择排序法
*
* @param arr
*/
public static void selectSort(int[] arr) {
// 没必要遍历最后一个角标:原因:最后一个值了,没有可以比较的元素了
// 减少依次比较
for (int x = 0; x < arr.length - 1; x++) {
// y+1的原因:始终让x与x后一位开始的元素进行比较
for (int y = x + 1; y < arr.length; y++) {
if (arr[x] > arr[y]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
}