四种基本的排序方法:冒泡排序,选择排序,插入排序,快速排序



排序的方法有:冒泡排序,选择排序,插入排序,快速排序


快速排序法:



package quick;

import java.util.Random;

public class QuickSort {

/*

* 步骤:

* 1、取一随机位置的元素作为基准(pivot,或叫枢纽)

* 2、将基准移到最后位置(方便数组的其它元素与之比较),将小于此基准的元素放到数组的前面,然后将基准移到所有比它小的元素的最大序号的下一个位置。

* 3、将这个基准的新位置返回,并作为迭代的分割点。

* 4、迭代比基准的前面、后面两个部分。

*/   

   private Randomrandom =new Random();  
   

   /* 交换 */

    public void swap(int[] array, int i,int j){  

       int temp = array[i];  

       array[i] = array[j];  

       array[j] = temp;  

   }  

    
   /*查找枢纽的索引号 */  

   public int getPivotIndex(int[] array, int begin,int end){  

       int index = begin + random.nextInt(end-begin+1);  

       int pivot = array[index];     

       //把pivot换到最后  

       swap(array, index, end);  

       for(int i=index=begin; i < end; i++){  

           if(array[i] < pivot){              

               swap(array, index++, i);   //index从0开始计算了,记录小于pivot的值     //将小于pivot的值的元素移动到index位置  

           }  

       }  

       swap(array, index, end);

            //将pivot放到所有比它小的元素的下一个位置(即此时的index位置)。     

        return index;  

    }   

    /*

    * 快速排序法(Divide and conquer)

    * @param array 待排序的数据

    * @param begin 开始序号

    * @param end   最后一个元素的序号

    */  

   public void quickSort(int[] array, int begin,int end){  

       if(end > begin){  

           int index = getPivotIndex(array, begin, end);   

           quickSort(array, begin, index-1);  

           quickSort(array, index+1, end);  

       }  

    }  


   public static void main(String[] args) {  

       int [] array = {3, 1, 7, 5, 2, 9, 10, 4, 8, 6};           

       QuickSort sort =new QuickSort();  

       sort.quickSort(array, 0, array.length-1);            

       //输出  

       for(int val : array){  

           System.out.println(val);  

       }     

    }

}  





冒泡排序算法

public class TestBubbleSort {

      public static void sort(int[] a) {

       int temp = 0;

       // 外层循环,它决定一共走几趟

      for (int i = 0; i <a.length-1; ++i) {

        //内层循环,它决定每趟走一次

        for (int j = 0; j <a.length-i-1 ; ++j) {

         //如果后一个大于前一个

          if (a[j + 1] < a[j]) {

            //换位

            temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;

         }

       }

     }

  }

}




选择排序的代码

public class TestSelectSort {

public static void sort(int arr[]) {

int temp = 0;

for (int i = 0; i < arr.length - 1; i++) {

// 认为目前的数就是最小的, 记录最小数的下标

int minIndex = i;

for (int j = i + 1; j < arr.length; j++) {

if (arr[minIndex] > arr[j]) {

// 修改最小值的下标

minIndex = j;

}

}

// 当退出for就找到这次的最小值

if (i != minIndex) {

temp = arr[i];

arr[i] = arr[minIndex];

arr[minIndex] = temp;

}

}

}

}


插入排序的代码

public class TestInsertSort {

public static void sort(int arr[]) {

int i, j;

for (i = 1; i < arr.length; i++) {

int temp = arr[i];

for (j = i; j > 0 && temp < arr[j - 1]; j--) {

arr[j] = arr[j - 1];

}

arr[j] = temp;

}

}

}


发布了6 篇原创文章 · 获赞 0 · 访问量 4460
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览