码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2015-12-17 22:26:33      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

排序算法一共有八种

  • 插入排序:顾名思义,就是将一个个数往已经排序好了的数列中插入。
    1. 直接插入排序、
    2. 二分法插入排序、
    3. 希尔排序
  • 交换排序:就是每次拿两个数按照一定的规则进行比较,然后交换位置
    1. 冒泡排序、
    2. 快速排序 
  • 选择排序:就是根据要求每次遍历一遍就选择一个数
    1. 直接选择排序、
    2. 堆排序
  • 归并排序:就是将全部待排序的数列分来,通过递归分开无数个子集,最小为一个数,然后将每两个排列好的子集合并成一个集,也是递归实现

 

具体每种算法:

直接插入排序:

  

技术分享
public class DirectInsertSort {
    public static void main(String[] args){
        Random random = new Random();

        int a[] = new int[13];
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(100) + 1;
        }
        System.out.print("排序前:");
        for(int i =0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
        System.out.println();
        for(int i =1;i<a.length;i++){
            //temp為待插的數
            int temp =a[i];
            //j為記錄下temp插入的位置
            int j;
            for(j=i-1;j>=0;j--){
                //每次將比temp大的數往后移一位
                if(a[j]>temp){
                    a[j+1] = a[j];
                }
                else{
                    //防止j往下走,
                    break;
                }
            }
            a[j+1]=temp;
        }
        System.out.print("排序后:");
        for(int k= 0;k<a.length;k++){
            System.out.print(a[k]+",");
        }
    }
}
View Code

 

二分插入排序:

希尔排序:

冒泡排序:

  

技术分享
public class MaoPaoSort {

    public static void main(String[] args) {
        Random random = new Random();

        int a[] = new int[13];
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(100) + 1;
        }
        System.out.print("排序前:");
        for(int i =0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
        System.out.println();
        
        for(int i =0;i<a.length;i++){
            for(int j =0;j<a.length-1-i;j++){
                int temp;
                if(a[j]>a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        
        System.out.print("排序后:");
        for(int k= 0;k<a.length;k++){
            System.out.print(a[k]+",");
        }
        
        
    }

}
View Code

快速排序:

技术分享
public class QuickSort {

    public static void main(String[] args) {
        Random random = new Random();

        int a[] = new int[13];
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(100) + 1;
        }
        System.out.print("排序前:");
        for(int i =0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
        
        quicksort(a, 0, a.length-1);
        
        System.out.println();
        System.out.print("排序后:");
        for(int k= 0;k<a.length;k++){
            System.out.print(a[k]+",");
        }
    }
    private static void quicksort(int []num,int start,int end){
        int i = start;
        int j = end;
        int base = num[i];
        if(start>=end) return;
        while(i!=j){
            while(num[j]>=base && j>i){
                j--;
            }
            if(i<j){
                num[i]=num[j];
                //比忘了
                i++;
            }
            while(num[i]<=base && i<j){
                i++;
            }
            if(i<j){
                num[j]=num[i];
                //別忘了
                j--;
            }
        }
        num[i]=base;
        quicksort(num,start,i-1);
        quicksort(num,i+1,end);
        
    }

}
View Code

 

直接选择排序:

技术分享
public class DirectSelectSort {

    public static void main(String[] args) {
        Random random = new Random();
        int a[] = new int[13];
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(100) + 1;
        }
        System.out.print("排序前:");
        for(int i =0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
        method(a);
        
        System.out.println();
        System.out.print("排序后:");
        for(int k= 0;k<a.length;k++){
            System.out.print(a[k]+",");
        }
    }
    
    private static void method(int []num){
        for(int i =0;i<num.length;i++){
            int min = num[i];
            int index= i;
            int temp;//用來交換的中間值
            for(int j = i+1;j<num.length;j++){
                if(num[j]<min){
                    min=num[j];
                    index=j;
                }
            }
            num[index]=num[i];
            num[i]=min;
        }
    }
}
View Code

堆排序:

 

归并排序:

 

排序算法

标签:

原文地址:http://www.cnblogs.com/could-deng/p/5055433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!