Java学习----day3——八大排序

排序分为
1.内部排序
2.外部排序

3.25更新,目前呢只是学习和使用这些方法,就是单纯的get工具。实质性的算法思维方式无从下手。


主流排序算法分类

内部排序只要是利用内存进行排序
外部排序是因为所操作的数据较大需要外部存储进行操作

1.冒泡排序
很形象的形容,将最大的数字冒泡到最上层固定住。
主要实现过程就是for的嵌套

package com.Example.Sort;
 /**
  * @author Administrator 
  * @function : 冒泡算法 
*/ 
public class MPtoSort {
    public static int count=0;
    public static void main(String[] args){
        int[] inPut=MPtoSort.mp();
        MPtoSort.outPut(inPut);
        System.out.println("\n"+count);
    }
    public static int[] mp(){
        int[] finalArray={3,1,5,2};
        for(int j=0;j<finalArray.length;j++){
            for(int i=0;i<finalArray.length-j-1;i++){
                count++;
                if(finalArray[i]>finalArray[i+1]){
                    int memory=0;
                    memory=finalArray[i+1];
                    finalArray[i+1]=finalArray[i];
                    finalArray[i]=memory;

                }
            }
        }
        return finalArray;
    }
    public static void outPut(int[] array){
        for (int i : array) {
           System.out.print(i);
        }
    }
}

2.快速排序
主要思想我认为是类似于二分法那种。什么分治法,我是没理解深入。
快速排序主要思想
这里写图片描述
以下是自己的重新理解:
快速排序
代码设计:
手足无措!!!最先想到的是迭代,因为快排中总存在中心值和左右区域的扫描。
然后就是左右区域的扫描。
慢慢的有些思路了,就像赶鸭子上架,将小的元素全部放在左边,大的元素放在右边。逆向思维想想看,有点像数学归纳法。(其实我也觉得我的思维比较怪)即保证【n-1

public void quick_sort(int []a,int left,int right){
    //结束迭代
    if(left > right){
        return;
    }
    int i = left ;
    int j = right;

    int temp = a[left];//设置基准值,将最左端元素作为基准值

    while(i != j){
        //往左移位,直到大于temp
        while(i<j && a[j]>=temp){
            j--;
        }
        //往右移位,直到小于temp
        while(i<j && a[i]<=temp){
            i++;
        }
        if(i < j){
            //交换彼此的数据
            int tt = a[i];
            a[i] = a[j];
            a[j] = tt;
        }

    }

    //交换基位数据
    int kk = a[i];
    a[i] = temp;
    a[left] = kk;

    //下一次迭代
    quick_sort(a,left,i-1);//左半边
    quick_sort(a,j+1,right);//右半边


}
posted @ 2017-03-24 23:27  理工物联网  阅读(84)  评论(0编辑  收藏  举报