数组排序算法

来源:互联网 发布:方正飞腾软件下载 编辑:程序博客网 时间:2024/06/05 19:27

1、选择排序算法

package tan;public class selectSort {/**选择排序算法 * j=i+1;表示前后比较 * i < arr.length-1 最后一个角标元素没有必要比较了,-1是为了减少一次比较 * @param arr */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 main(String[] args) {int[] a = { 21, 23, 14, 46, 75, 92, 8 };System.out.println("排序之前:");printArray(a);selectsort(a);System.out.println("排序之后:");printArray(a);}    /**     *封装 打印数组的功能函数     * @param arr     */public static void printArray(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.println(arr[i] + "]");}}}}

2、冒泡排序
相邻的两个元素进行比较,如果条件符合就换位

记忆口诀:N个数字来排队,两两相比小靠前,外层循环N-1,内层循环N-1-i;

package tan;import java.util.Arrays;public class TestArraySort {/** * 选择排序算法 j=i+1;表示前后比较 i < arr.length-1 最后一个角标元素没有必要比较了,-1是为了减少一次比较 *  * @param arr */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; */swap(arr, i, j);}}}}/** * 冒泡排序算法 j<arr.length-i-1;其中-i是让每一次比较的元素减少,-1是为了防止角标越界。 *  */public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr, j, j + 1);}}}}/** * 位置置换功能函数 *  * @param arr * @param a * @param b */public static void swap(int[] arr, int a, int b) {int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}/** * 封装 打印数组的功能函数 *  * @param arr */public static void printArray(int[] arr) {System.out.print("[");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 void main(String[] args) {int[] a = { 21, 23, 14, 46, 75, 92, 8 };System.out.println("排序之前:");printArray(a);/* selectsort(a); */bubbleSort(a);printArray(a);/* * bubbleSort(a); System.out.println("排序之后:"); printArray(a); *//* * System.out.println("开发中最常用的是:"); Arrays.sort(a); printArray(a); */}}  

3、折半查找算法
折半查找:必须要保证该数组为有序的

package tan;public class Test {public static void main(String[] args) {int []a={1,3,4,6,7,9,12};//int index=getIndex(a, 6);int index=insertSort(a, 5);System.out.println("index="+index);}//折半查找方法一public static int halfSearch(int arr[],int key){int min=0;int max=arr.length-1;int mid=(max+min)/2;while(arr[mid]!=key){if(key>arr[mid]){min=mid+1;}else if(key<arr[mid]){max=mid-1;}if(min>max){return -1;}mid=(max+min)/2;}return mid;}//折半查找方法二public static int halfSearch2(int arr[],int key){int min=0,max=arr.length-1,mid;while(min<=max){mid=(max+min)>>1;//右移一位表示除以2if(key>arr[mid]){min=mid+1;}else if(key<arr[mid]){max=mid-1;}else{return mid;}}return -1;}//插入排序:通过折半查找的形式找出要插入的元素在数组中的位置,如果该元素存在则在该位置插入,否则返回最小角标值public static int insertSort(int arr[],int key){int min=0,max=arr.length-1,mid;while(min<=max){mid=(max+min)>>1;//右移一位表示除以2if(key>arr[mid]){min=mid+1;}else if(key<arr[mid]){max=mid-1;}else{return mid;}}return min;}//定义查找功能,获取key第一次出现在数组中的位置,返回-1表示该key不存在public static int getIndex(int arr[],int key){for(int i=0;i<arr.length;i++){if(arr[i]==key){return i;}    }return -1;}}


0 0
原创粉丝点击