排序算法(冒泡、选择、插入、希尔、快排、归并)
package cn.kales.algorithm.test.test01;
public class Sort {
public void BubbleSort(int[] A){
int len = A.length;
for (int i = 0;i<len;i++){
int flag = 0;
for (int j = 0;j<len-i-1;j++){
int temp;
if (A[j] > A[j+1]){
temp = A[j+1];
A[j+1] = A[j];
A[j] = temp;
flag = 1;
}
}
if (flag == 0){
break;
}
}
}
public void SelectSort(int[] A){
for (int i = 0;i< A.length-1;i++){
int minIndex = i;
for (int j = i+1;j<A.length;j++){
if (A[j] < A[minIndex]){
minIndex = j;
}
}
if (minIndex != i){
int temp;
temp = A[i];
A[i] = A[minIndex];
A[minIndex] = temp;
}
}
}
public void InsertSort(int[] A){
int len = A.length;
for (int i = 1;i<len;i++){
for (int j = i-1;j>=0;j--){
if (A[i] < A[j]){
int temp;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
}
}
public void ShellSort(int[] A){
int len = A.length;
for (int gap = len/2;gap>0;gap/=2){
for (int i = gap;i<len;i++){
while(i-gap >= 0 && A[i] < A[i-gap]){
int temp = A[i];
A[i] = A[i-gap];
A[i-gap] = temp;
}
}
}
}
public void QuickSort(int[] arr,int left,int right){
int key = arr[left];
int i = left;
int j = right;
while(i<j){
while(i<j && arr[j] >= key) j--;
if (i<j) {
arr[i] = arr[j];
i++;
}
while(i<j && arr[i] <= key) i++;
if (i<j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = key;
QuickSort(arr,left,i-1);
QuickSort(arr,i+1,right);
}
public void MergeSort(int[] arr ,int left,int right,int[] temp){
if (left<right){
int mid = (left+right)/2;
MergeSort(arr,left,mid,temp);
MergeSort(arr,mid+1,right,temp);
merge(arr,left,mid,right,temp);
}
}
public void merge(int[] arr,int left,int mid,int right,int[] temp){
int i = left;
int j = mid+1;
int t = 0;
while(i<=mid && j<=right){
if (arr[i] <= arr[j])
temp[t++] = arr[i++];
else
temp[t++] = arr[j++];
}
while(i<=mid) temp[t++] = arr[i++];
while(j<=right) temp[t++] = arr[j++];
for (int start = 0;start < temp.length;start++){
arr[left++] = temp[start];
}
}
}