常见排序算法

来源:互联网 发布:志鸿优化答案查询 编辑:程序博客网 时间:2024/06/15 00:49

package somesorts;

public class Sort {

public static void main(String[] args) {    int[] a= {50, 45, 68, 90, 29, 34, 17};     //bubbleSort(arr);    int start = 0;    int end = a.length-1;    quickSort(a,start,end);    for(int i = 0; i<a.length; i++){         System.out.print(a[i] + "  ");     }}/** *  * <p>Discription:[数组遍历]</p> * Created on 2017年5月12日 * @param arr * @author:[风凌渡口] */public static void traversal(int[] arr){    for(int i = 0; i < arr.length; i++){        System.out.print(arr[i] + " ");    }}/** * 插入排序 * <p>Discription:[选中的数与他之前拍好序的数冒泡排序]</p> * Created on 2017年5月11日 * @param arr * @author:[风凌渡口] */public static void insertsort(int[] arr){    int tmp;    for(int i = 2; i < arr.length; i++){        tmp = arr[i];        int j = i - 1;        while(j >= 0 && arr[j] < tmp){            arr[j + 1] = arr[j];            arr[j] = tmp;            j--;        }       }    traversal(arr); }/** *  * <p>Discription:[选择排序]</p> * Created on 2017年5月12日 * @param arr * @author:[风凌渡口] */public static void selectSort(int[] arr){    int j, tmp;    for(int i = 0; i < arr.length; i++){        j = i + 1;        for(; j < arr.length; j++){            if(arr[j] < arr[i]){                tmp = arr[i];                arr[i] = arr[j];                arr[j] = tmp;            }        }    }    traversal(arr);}/** *  * <p>Discription:[冒泡排序]</p> * Created on 2017年5月12日 * @param arr * @author:[风凌渡口] */public static void bubbleSort(int[] arr){    int j;     int tmp;    for(int i = 0; i < arr.length ; i++){        j = 0;        while(j < arr.length - i - 1){            if(arr[j] > arr[j + 1]){                tmp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = tmp;               }            j ++;        }    }    traversal(arr);}/** *  * <p>Discription:[快速排序]</p> * Created on 2017年5月12日 * @param a * @param low * @param high * @author:[风凌渡口] */public static void quickSort(int[] a,int low,int high){    int start = low;    int end = high;    int key = a[low];    while(end > start){        //从后往前比较        while(end > start && a[end] >= key)  //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较            end--;        if(a[end] <= key){            int temp = a[end];            a[end] = a[start];            a[start] = temp;        }        //从前往后比较        while(end > start && a[start] <= key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置           start++;        if(a[start] >= key){            int temp = a[start];            a[start] = a[end];            a[end] = temp;        }    //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用    }    //递归    if(start > low) quickSort(a, low, start-1);//左边序列。第一个索引位置到关键值索引-1    if(end < high) quickSort(a,end+1, high);//右边序列。从关键值索引+1到最后一个}

}

1 0
原创粉丝点击