数组排序
package array; public class ArraySort { public static void main(String[] args){ int[] arr={1,3,2,45,65,33,12}; System.out.println("交换之前:"); for(int num:arr){ System.out.print(num+" "); } //快速查找法 //二分查找法 /* * 1.冒泡排序 * 求最大,比较两个相邻的元素,将值大的元素交换至右端 * (下标0 vs 下标1),(下标1 vs 下标2),(下标2 vs 下标3) */ // bubbleSort(arr);
/* * 2.选择排序 * 求最小,每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录 * (下标0 vs 下标1),(下标0 vs 下标2),(下标0 vs 下标3) */ // selectionSort(arr);
/* * 3插入排序 * 帮元素找位置,将指针指向某个元素,假设该元素左侧的元素全部有序,将该元素抽取出来,然后按照从右往左的顺序分别与其左边的元素比较,遇到比其大的元素便将元素右移,直到找到比该元素小的元素或者找到最左面发现其左侧的元素都比它大,停止; */ // insertSort(arr);
/* * 用一重循环实现冒泡排序 * 想办法改变arr.length */ sort(arr); System.out.println(); System.out.println("交换后:"); for(int num:arr){ System.out.print(num+" "); } } /* * 冒泡排序 */ public static int[] bubbleSort(int[] arr) { 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]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; } /* * 选择排序 */ public static int[] selectionSort(int[] arr) { for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序 int k = i; for(int j = k + 1; j < arr.length; j++){// 选最小的记录 if(arr[j] < arr[k]){ k = j; //记下目前找到的最小值所在的位置 } } //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换 if(i != k){ //交换a[i]和a[k] int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } return arr; } /* * 插入排序方法 */ public static void insertSort(int[] arr){ for(int x = 1; x<arr.length; x++){//外层向右的index,即作为比较对象的数据的index int temp = arr[x];//用作比较的数据 int leftindex = x-1; while(leftindex>=0 && arr[leftindex]>temp){//当比到最左边或者遇到比temp小的数据时,结束循环 arr[leftindex+1] = arr[leftindex]; arr[leftindex] = temp;// leftindex--; } // arr[leftindex+1] = temp;//把temp放到空位上 } } public static int[] sort(int arr[]){ int size=arr.length-1; for(int i= 0 ;i<size;i++){ if(arr[i]>arr[i+1]){ int temp =arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } if(i==size-1){ // i=-1; size--; continue; } } return arr; } }