数据结构01之简单排序

数据结构和一些常用算法最简单和最常用的当然是查找和排序!

查找最常用的有线性查找、和二分查找都比较简单!

线性查找顾名思义就是以线性的方式挨着找!哈哈!说的有点过!不过就是这意思!

二分查找就是从中间分开!然后比较看看离那边近!然后再分、再比较、再分··直到找到! 

得! 直奔主题!关于简单排序有:

冒泡排序

选择排序

插入排序

 冒泡排序

 冒泡排序相对比较简单,就是当满足条件后就两两互换!当换完一轮后至少会确定一个最大值或者最小值、然后有多少个元素换多少次不是局都排好序了吗!

当然毋庸置疑的它没什么效率,但是思想比较简单!比较适合入门!

 public void bubbleSort(){

        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int k;
        for(int j=0;j<arr.length-1;j++){//可以把这层循环注掉看看只执行一次后什么样,因为最后一次不用执行所以减1
            for(int i=0;i<arr.length-j-1;i++){//执行循环一次派出一个最大的,并且在下一次中少执行一次,所以减j
                if(arr[i]>arr[i+1]){
                    k = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = k;

                }    
            }
        }
         showArray(arr);
    } 

 

 选择排序

选择排序是把所有元素扫描一遍挑出最大或者最小,进行交换! 

选择排序必冒泡的优点是减少了交换次数,但是很不幸判断次数保持不变!See It!

 

 public void chooseSort(){

        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int temp,min;
        for(int j=0;j<arr.length;j++){
            min = j;
            for(int i=j+1;i<arr.length;i++){//只选出一个最小的来
                if(arr[i]<arr[min])
                    min = i;
            }
            //做一次交换
            temp = arr[j];
            arr[j] = arr[min];
            arr[min] = temp;
        }
        showArray(arr);
    }

 插入排序

 直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程

 算法效率要比前两个都高

public void insertSort(){
        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int temp;
        for(int j=1;j<arr.length;j++){
            temp = arr[j];
            int i = j;
            while(i>0 && arr[i-1] >= temp){
                arr[i] = arr[i-1];
                i--;
            }
            arr[i] = temp;
        }
        showArray(arr);  } 

 只有前一个比后一个大的时候才进入while,然后依次跟之前排序的所有元素比较选择合适的位置,这个条件就注定了不会做多余的判断,因为只要不比前面的大他的条件就为假就不判断不交换了!所以极大的减少了判断和交换次数!因为之前的元素都是有序的只要前面一个不比他大,那么再往前就没有必要比了!,所以经典的是while里面的判断,决定要不要交换!

 整个类的代码:

public class SimpleSort {

    /**
     * 
@param args
     
*/
    public static void main(String[] args) {
        new SimpleSort().insertSort();
    }
    
    public void bubbleSort(){
        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int k;
        for(int j=0;j<arr.length-1;j++){//可以把这层循环注掉看看只执行一次后什么样
            for(int i=0;i<arr.length-1-j;i++){//执行循环一次派出一个最大的
                if(arr[i]>arr[i+1]){
                    k = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = k;
                }    
            }
        }
        showArray(arr);
    }
    
    public void chooseSort(){
        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int temp,min;
        for(int j=0;j<arr.length;j++){
            min = j;
            for(int i=j+1;i<arr.length;i++){//只选出一个最小的来
                if(arr[i]<arr[min])
                    min = i;
            }
            //做一次交换
            temp = arr[j];
            arr[j] = arr[min];
            arr[min] = temp;
        }
        showArray(arr);
    }
    
    public void insertSort(){
        int[] arr = {0,3,5,2,4,7,9,1,6,8}; 
        int temp;
        for(int j=1;j<arr.length;j++){
            temp = arr[j];
            int i = j;
            while(i>0 && arr[i-1] >= temp){
                arr[i] = arr[i-1];
                i--;
            }
            arr[i] = temp;
        }
        showArray(arr);
    }

    public void showArray(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
    
    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-03-30 15:56  _公孓℡  阅读(241)  评论(0编辑  收藏  举报