冒泡排序
-概述:数值小的上浮,数值大的下沉
-比较方法:int[] arr = {12,54,21,67,33}
*第一次:arr[0]与arr[1]比较,arr[1]与arr[2]比较,arr[2]与arr[3]比较,arr[3]与arr[4]比较,共比较4次,arr[4]必然是最大的数
*第二次:arr[0]与arr[1]比较,arr[1]与arr[2]比较,arr[2]与arr[3]比较,共比较3次,arr[3]是剩下数中最大的
*第三次:arr[0]与arr[1]比较,arr[1]与arr[2]比较,共比较2次
*第四次:arr[0]与arr[1]比较,只比较1次
-外循环:决定比较的次数
-内循环:决定相邻两个数比较的次数
public static void main(String[] args) { int[] arr = {12,54,21,67,33}; bubbleSort(arr); print(arr); } public static void bubbleSort(int[] arr){ for (int i = 0; i < arr.length; i++) { //控制比较次数,外循环只需要比较arr.length-1次就好了 for (int j = 0; j < arr.length-1-i; j++) { //-1为了防止溢出 if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void print (int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } }48.选择排序
-概述:用一个索引位置的元素依次与其他索引位置的元素比较,小的在前,大的在后
-比较方法:int[] arr = {12,54,21,67,33}
*第一次:arr[0]分别与arr[1-4]比较,比较4次
*第二次:arr[1]分别与arr[2-4]比较,比较3次
*第三次:arr[2]分别a与rr[3-4]比较,比较2次
*第四次:arr[3]分别与arr[4]比较,比较1次
-图解:
public static void main(String[] args) { int[] arr = {12,54,21,67,33}; selectSort(arr); print(arr); } public static void selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = i; j < arr.length; j++) { if(arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } public static void print (int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } }附上一个另外一种思路的C的选择排序
void test01(int *arr,int len) { for(int i=0;i<len-1;i++){ int min = i; for(int j=i+1;j<len;j++){ //每一轮都选出数组中最小的元素,并让它和当前未归序的首元素互换 if(arr[j]<arr[min]){ min = j; } } if(min!=i){ int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } }49.二分查找
-使用前提:数组有序
-比较方法:
*int left = 0;
*int right = arr.length-1;
*int middle = (left +right) / 2;
-图解:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入你想要查询的值:"); int value = sc.nextInt(); int[] arr = {11,22,33,44,55,66}; int index = Method(arr,value); if(index!=-1){ System.out.println("所查询数字在数组中的索引是:"+index); }else{ System.out.println("所查询数字在数组中不存在!!"); } } public static int Method(int[] arr, int value) { int left = 0; int right = arr.length-1; while(left<=right){ int middle = (left + right) /2; //当找到value时,返回此时的索引 if(arr[middle] == value) return middle; else if(arr[middle] < value){ left = middle +1; }else{ right = middle -1; } } return -1; //当数组中不存在value时,返回-1 }