package somesorts;
public class Sort {
public static void main(String[] args) {
int[] a= {50, 45, 68, 90, 29, 34, 17};
//bubbleSort(arr);
int start = 0;
int end = a.length-1;
quickSort(a,start,end);
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + " ");
}
}
/**
*
* <p>Discription:[数组遍历]</p>
* Created on 2017年5月12日
* @param arr
* @author:[风凌渡口]
*/
public static void traversal(int[] arr){
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
/**
* 插入排序
* <p>Discription:[选中的数与他之前拍好序的数冒泡排序]</p>
* Created on 2017年5月11日
* @param arr
* @author:[风凌渡口]
*/
public static void insertsort(int[] arr){
int tmp;
for(int i = 2; i < arr.length; i++){
tmp = arr[i];
int j = i - 1;
while(j >= 0 && arr[j] < tmp){
arr[j + 1] = arr[j];
arr[j] = tmp;
j--;
}
}
traversal(arr);
}
/**
*
* <p>Discription:[选择排序]</p>
* Created on 2017年5月12日
* @param arr
* @author:[风凌渡口]
*/
public static void selectSort(int[] arr){
int j, tmp;
for(int i = 0; i < arr.length; i++){
j = i + 1;
for(; j < arr.length; j++){
if(arr[j] < arr[i]){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
traversal(arr);
}
/**
*
* <p>Discription:[冒泡排序]</p>
* Created on 2017年5月12日
* @param arr
* @author:[风凌渡口]
*/
public static void bubbleSort(int[] arr){
int j;
int tmp;
for(int i = 0; i < arr.length ; i++){
j = 0;
while(j < arr.length - i - 1){
if(arr[j] > arr[j + 1]){
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
j ++;
}
}
traversal(arr);
}
/**
*
* <p>Discription:[快速排序]</p>
* Created on 2017年5月12日
* @param a
* @param low
* @param high
* @author:[风凌渡口]
*/
public static void quickSort(int[] a,int low,int high){
int start = low;
int end = high;
int key = a[low];
while(end > start){
//从后往前比较
while(end > start && a[end] >= key) //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
end--;
if(a[end] <= key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
while(end > start && a[start] <= key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
start++;
if(a[start] >= key){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
//递归
if(start > low) quickSort(a, low, start-1);//左边序列。第一个索引位置到关键值索引-1
if(end < high) quickSort(a,end+1, high);//右边序列。从关键值索引+1到最后一个
}
}