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到最後一個
}
}