您的位置:首页 > 其它

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

2016-10-21 10:25 357 查看

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

快速排序法:
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 < a
4000
rr.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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐