自己整理的几个排序算法
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
int[] array = {10,20,8,15,23,12,};
maoPaoSort(array);
//quickSort(array, 0, array.length-1);
//insertSort(array);
//selectSort(array);
System.out.println(Arrays.toString(array));
}
/**
* 冒泡排序 思想:每次从第一个开始,两两相比,小的数字冒出来,放到前面,大的数字沉下去。一次循环完将最大的数放到了最后
* @param array
*/
private static void maoPaoSort(int[] array) {
int temp = 0;
for(int i = 0;i<array.length;i++){
for(int j = 0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
/**
* 快速排序法 思想:找第一个数为基数赋给一个变量,相当于数组第一个现在是个坑,先从最后一个数找起,直到有比基数小的数,则将这个数放到这个坑中,
* 然后从前面找起,直到有比这个基数大的数,将这个数又放到前面那个坑里去。一次循环完成后,让其返回现在为一个坑的那个下标,作为下一次循环时的基数下标
* 挖坑填坑+递归+分治
* */
public static void quickSort(int[] array,int low,int high){
if(low < high){
int mid = partition(array,low,high);
quickSort(array,low,mid-1);
quickSort(array,mid+1,high);
}
}
/**
* 将比基数大的数放到右边,比基数小的数放到左边,
* @param array
* @param low
* @param high
* @return
*/
private static int partition(int[] array, int low, int high) {
int baseKey = array[low];//基数
if(low < high){
while (low < high){
while(low<high && array[high]>baseKey){
high--;
}
if(low < high){
array[low] = array[high];
low++;
}
while(low < high && array[low] < baseKey){
low++;
}
if(low < high){
array [high] = array[low];
high--;
}
}
array[low] = baseKey;
//System.out.println(Arrays.toString(array));
}
return low;
}
/**
* 插入排序 思想:1,将第一个数看成是已经排好序的序列 2,取出下一个元素a,在排好序的列中从后面向前扫描,如果序列中元素大于a,则该元素往后移动,
* 直到找到一个元素小于等于a,这时将a插入到这个元素的后面。重复这个步骤。
*/
public static void insertSort(int[] array){
int insertNum = 0; //要插入的数
for(int i = 1; i < array.length; i++){
insertNum = array[i];
int j;
for(j = i; j > 0; j--){
if(array[j-1] > insertNum){
array[j] = array[j-1];
continue;
}
break;
}
array[j] = insertNum;
}
}
/**
* 选择排序 思想:选择一个数组中最小的数,放在第一位,然后再找余下的数中最小的数,放在第二位,重复这个操作
*/
public static void selectSort(int[] array){
int i, j, min, temp;
for(i = 0; i < array.length; i++){
min = i;//最小数的下标
for(j = i+1; j < array.length; j++){
if(array[j] < array[min])//找出剩余数字中的最小数
min = j;
}
if(i != min){//将最小数字放到前面来,交换
temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
}