##快速排序
public static void quickSort(int[] array,int low,int high){
int i=low; //待排序段起始下标
int j=high; //待排序段末端下标
int key=array[i];//基准
if(i>=j){
return; //递归出口
}
while(i<j){
while(array[j]>=key&&i<j){
j--; //先从末端下标向左滑动,直到有值比基准Key小
}
int temp;
temp=array[j]; //交换该值与基准Key
array[j]=array[i];
array[i]=temp;
while(array[i]<=key&&i<j){
i++; //从起始下标向右滑动,直到有值比基准Key大
}
temp=array[i]; //交换该值与基准Key
array[i]=array[j];
array[j]=temp;
}
quickSort(array,low,i-1); //对基准以左数组段进行递归排序
quickSort(array,i+1,high); //对基准以右数组段进行递归排序
}
##冒泡排序
public static void maopaoSort(int[] array){
for(int i=0;i<array.length-1;i++){
boolean flag=true; //设置标志flag,默认此趟排序数组元素未发生交换
for(int j=0;j<array.length-1;j++){
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=false; //如果发生交换,说明未完成排序,继续循环
}
}
if(flag){
break; //如果此趟排序未发生元素交换,则表明数组已排序,无须循环
}
}
}
##简单选择排序
public static void selectSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int minindex = i;
int temp = array[minindex];
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minindex]) {
minindex = j;
}
}
array[i] = array[minindex];
array[minindex] = temp;
}
}
##插入排序
public static void insertSort(int[] array) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
int j = i - 1;
while (j >= 0 && array[j] > temp) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = temp;
}
}
##希尔排序
public static void hillSort(int[] array) {
for (int i = array.length / 2; i > 0; i /= 2) {
for (int j = i; j < array.length; j++) {
int temp = array[j];
int k = j - i;
while (k >= 0 && array[k] > temp) {
array[k + i] = array[k];
k -= i;
}
array[k + i] = temp;
}
}
}