【Java】數組的排序和查找
package com.Lu.weak2.day6;
public class ArraySort {
// 數組的選擇排序、冒泡排序、插入排序
// 數組的順序查找、二分查找、下標查找
private static int count = 0;
public static void main(String[] args) {
int[] arr = {2,5,76,32,58,95,12,43,25,75,100};
// selectSort(arr); //count = 16
// bubbleSort(arr); //count = 16
insertSort(arr); //count = 16
// int index = orderCheck(arr, 32); //count = 5;
// int index = harfSearch(arr, 32); //count = 3;
int index = harfSearch2(arr, 32); //count = 4;
System.out.println(index + "\t" + count);
}
public static void selectSort(int[] arr){ //選擇排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = i + 1; j < arr.length; j++) { //最小數放在第i位
if(arr[i] > arr[j]){
swap(arr,i,j);
count++;
}
}
}
System.out.print("selectSort:");
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void bubbleSort(int[] arr){ //冒泡排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = 0; j < arr.length - 1 - i; j++) { //最大數放在最後一位
if(arr[j] > arr[j + 1]){
swap(arr, j, j + 1);
count++;
}
}
}
System.out.print("bubbleSort:");
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void insertSort(int[] arr){ //插入排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = i + 1; j > 0; j--) { //放在第一個比它小的位置後面
if(arr[j] < arr[j - 1]){
swap(arr, j, j - 1);
count++;
}
}
}
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void swap(int arr[],int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void displayArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
public static int orderCheck(int[] arr, int key){ //順序查找
for (int i = 0; i < arr.length; i++) {
count ++;
if(key == arr[i]){
return i;
}
}
return -1;
}
public static int harfSearch(int[] arr, int key){ //二分法查找,必須是有序數組
int min = 0;
int max = arr.length - 1;
int mid = (max + min)/2;
while(key != arr[mid]){
if(key > arr[mid]){
min = mid + 1;
} else if(key < arr[mid]){
max = mid - 1;
}
if(min > max)
return -1;
mid = (max + min)/2;
count++;
}
return mid;
}
public static int harfSearch2(int[] arr, int key){
int min = 0;
int max = arr.length - 1;
int mid;
while(min<=max){
mid = (max + min) >> 1; //mid的初始化必須在循環內
count++;
if(key > arr[mid]){
min = mid + 1;
} else if(key < arr[mid]){
max = mid - 1;
} else{
return mid;
}
}
return -1;
}
}
public class ArraySort {
// 數組的選擇排序、冒泡排序、插入排序
// 數組的順序查找、二分查找、下標查找
private static int count = 0;
public static void main(String[] args) {
int[] arr = {2,5,76,32,58,95,12,43,25,75,100};
// selectSort(arr); //count = 16
// bubbleSort(arr); //count = 16
insertSort(arr); //count = 16
// int index = orderCheck(arr, 32); //count = 5;
// int index = harfSearch(arr, 32); //count = 3;
int index = harfSearch2(arr, 32); //count = 4;
System.out.println(index + "\t" + count);
}
public static void selectSort(int[] arr){ //選擇排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = i + 1; j < arr.length; j++) { //最小數放在第i位
if(arr[i] > arr[j]){
swap(arr,i,j);
count++;
}
}
}
System.out.print("selectSort:");
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void bubbleSort(int[] arr){ //冒泡排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = 0; j < arr.length - 1 - i; j++) { //最大數放在最後一位
if(arr[j] > arr[j + 1]){
swap(arr, j, j + 1);
count++;
}
}
}
System.out.print("bubbleSort:");
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void insertSort(int[] arr){ //插入排序
int count = 0;
for (int i = 0; i < arr.length - 1; i++) { //輪數
for (int j = i + 1; j > 0; j--) { //放在第一個比它小的位置後面
if(arr[j] < arr[j - 1]){
swap(arr, j, j - 1);
count++;
}
}
}
displayArr(arr);
System.out.println("消費時間:" + count);
}
public static void swap(int arr[],int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void displayArr(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
public static int orderCheck(int[] arr, int key){ //順序查找
for (int i = 0; i < arr.length; i++) {
count ++;
if(key == arr[i]){
return i;
}
}
return -1;
}
public static int harfSearch(int[] arr, int key){ //二分法查找,必須是有序數組
int min = 0;
int max = arr.length - 1;
int mid = (max + min)/2;
while(key != arr[mid]){
if(key > arr[mid]){
min = mid + 1;
} else if(key < arr[mid]){
max = mid - 1;
}
if(min > max)
return -1;
mid = (max + min)/2;
count++;
}
return mid;
}
public static int harfSearch2(int[] arr, int key){
int min = 0;
int max = arr.length - 1;
int mid;
while(min<=max){
mid = (max + min) >> 1; //mid的初始化必須在循環內
count++;
if(key > arr[mid]){
min = mid + 1;
} else if(key < arr[mid]){
max = mid - 1;
} else{
return mid;
}
}
return -1;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.