简单排序java实现

来源:互联网 发布:金庸小说那本好看知乎 编辑:程序博客网 时间:2024/06/05 14:51

一.冒泡排序:每次遍历比较两个相邻的值,降序互换,依次进行,这样较大的值像气泡一样逐渐浮向顶部。

public class BubbleSort {public static void bubbleSort(int[] list){boolean needNextPass=true;for(int k=1;k<list.length&&needNextPass;k++){//如果某一次遍历没有发生交换则没有必要进行下次遍历needNextPass=false;for(int i=0;i<list.length-k;i++){if(list[i]>list[i+1]){//如果没有发生交换,needNextPass就取不到trueint temp=list[i];list[i]=list[i+1];list[i+1]=temp;needNextPass=true;}}}}public static void main(String[] args) {int[] list={2,9,5,4,8,1};bubbleSort(list);for(int i=0;i<list.length;i++){System.out.print(list[i]+"  ");}}}
严格说,这属于改进的冒泡排序方法,如果不设needNextPass就是最原始的冒泡排序算法。

二.选择排序:每一次遍历找出剩余数列的最小数,放在剩余数列的最前边,知道排完整个数列。

public class SelectSort {public static void selectSort(int a[]){        int minIndex = 0;        int temp = 0;        if((a==null)||(a.length==0))            return;        for(int i=0; i<a.length; i++){            minIndex = i;                        //无序区的最小数据数组下标            for(int j=i+1; j<a.length; j++){    //在无序区中找到最小数据并保存其数组下标                if(a[j]<a[minIndex]){                                minIndex = j;                }            }            if(minIndex!=i){                    //如果不是无序区的最小值位置不是默认的第一个数据,则交换之。                temp = a[i];                a[i] = a[minIndex];                a[minIndex] = temp;            }        }    }public static void main(String[] args) {int[] a={2,9,5,4,8,1,1};selectSort(a);for(int i=0;i<a.length;i++){System.out.print(a[i]+"  ");}}}

选择排序将交换次数从O(N^2)减少到O(N),不过比较次数任然是O(N^2)。然而选择排序仍然为大记录量的排序完成了重要改进,因为交换需要在内存中移动。

三.插入排序:每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。

public class InsertSort {public static void insertSort(int[] a){        if(a!=null){              for(int i=1;i<a.length;i++){               int temp=a[i],j=i;               if(a[j-1]>temp){                    while(j>=1&&a[j-1]>temp){                     a[j]=a[j-1];                     j--;                    }               }               a[j]=temp;              }            }            else             System.out.print("数列为空");     }public static void main(String[] args) {int[] a={2,9,5,4,8,1,1};insertSort(a);for(int i=0;i<a.length;i++){System.out.print(a[i]+"  ");}}
虽然插入排序算法仍然需要O(N^2)的时间,但在一般情况下,它要比冒泡排序快一倍,比选择算法还要快一点。
原创粉丝点击