public static void bubble_sort(int[] arry){
int n = arry.length;
for (int i = 0; i <n ; i++) {
for (int j = 1; j <n ; j++) {
if(arry[j-1]>arry[j]){
int tmp = arry[j];
arry[j] = arry[j-1];
arry[j-1] = tmp;
}
}
System.out.print("第"+(i+1)+"躺排序: ");
printArray(arry);
System.out.println();
}
}
第1躺排序: 1 3 1 4 5 2 6 9
第2躺排序: 1 1 3 4 2 5 6 9
第3躺排序: 1 1 3 2 4 5 6 9
第4躺排序: 1 1 2 3 4 5 6 9
第5躺排序: 1 1 2 3 4 5 6 9
第6躺排序: 1 1 2 3 4 5 6 9
第7躺排序: 1 1 2 3 4 5 6 9
第8躺排序: 1 1 2 3 4 5 6 9
public static void select_sort(int[] array){
int n = array.length;
for (int i = 0; i <n ; i++) {
int minIndex = i;
for (int j = i+1; j <n ; j++) {
if(array[minIndex]>array[j]){
minIndex = j;
}
}
int tmp = array[minIndex];
array[minIndex] = array[i];
array[i] = tmp;
System.out.print("第"+(i+1)+"躺排序: ");
printArray(array);
System.out.println();
}
}
第1躺排序: 1 3 4 1 5 9 2 6
第2躺排序: 1 1 4 3 5 9 2 6
第3躺排序: 1 1 2 3 5 9 4 6
第4躺排序: 1 1 2 3 5 9 4 6
第5躺排序: 1 1 2 3 4 9 5 6
第6躺排序: 1 1 2 3 4 5 9 6
第7躺排序: 1 1 2 3 4 5 6 9
第8躺排序: 1 1 2 3 4 5 6 9
public static void insert_sort(int[] array){
int n = array.length;
for (int i = 1; i <n ; i++) {
if(array[i]<array[i-1]){
int tmp = array[i];
int index = i;
for (int j = i-1; j >=0 ; j--) {
if(array[j]>tmp){
array[j+1] = array[j];
index = j;
}else {
break;
}
}
array[index] = tmp;
}
System.out.print("第"+i+"躺排序: ");
printArray(array);
System.out.println();
}
}
第1躺排序: 1 3 4 1 5 9 2 6
第2躺排序: 1 3 4 1 5 9 2 6
第3躺排序: 1 1 3 4 5 9 2 6
第4躺排序: 1 1 3 4 5 9 2 6
第5躺排序: 1 1 3 4 5 9 2 6
第6躺排序: 1 1 2 3 4 5 9 6
第7躺排序: 1 1 2 3 4 5 6 9
public static void shell_sort(int[] array){
int n = array.length;
int gap = n/2;
while(gap > 0){
for (int i = gap; i <n ; i++) {
int tmp = array[i];
int j = i;
while( j >= gap && array[j-gap] > tmp){
array[j] = array[j-gap];
j = j - gap;
}
array[j] = tmp;
}
System.out.print("步长为"+gap+"的排序: ");
printArray(array);
System.out.println();
gap = gap/2;
}
}
步长为4的排序: 3 1 2 1 5 9 4 6
步长为2的排序: 2 1 3 1 4 6 5 9
步长为1的排序: 1 1 2 3 4 5 6 9
public static int[] merge_sort(int[] a,int low,int high){
int mid = (low+high)/2;
System.out.print("mid为"+mid+"的排序: ");
printArray(a);
System.out.println();
if(low<high){
merge_sort(a,low,mid);
merge_sort(a,mid+1,high);
merge(a,low,mid,high);
}
return a;
}
public static void merge(int[] a, int low, int mid, int high) {
int[] temp = new int[high-low+1];
int i= low;
int j = mid+1;
int k=0;
while(i<=mid && j<=high){
if(a[i]<a[j]){
temp[k++] = a[i++];
}else{
temp[k++] = a[j++];
}
}
while(i<=mid){
temp[k++] = a[i++];
}
while(j<=high){
temp[k++] = a[j++];
}
for(int x=0;x<temp.length;x++){
a[x+low] = temp[x];
}
}
mid为3的排序: 3 1 4 1 5 9 2 6
mid为1的排序: 3 1 4 1 5 9 2 6
mid为0的排序: 3 1 4 1 5 9 2 6
mid为0的排序: 3 1 4 1 5 9 2 6
mid为1的排序: 3 1 4 1 5 9 2 6
mid为2的排序: 1 3 4 1 5 9 2 6
mid为2的排序: 1 3 4 1 5 9 2 6
mid为3的排序: 1 3 4 1 5 9 2 6
mid为5的排序: 1 1 3 4 5 9 2 6
mid为4的排序: 1 1 3 4 5 9 2 6
mid为4的排序: 1 1 3 4 5 9 2 6
mid为5的排序: 1 1 3 4 5 9 2 6
mid为6的排序: 1 1 3 4 5 9 2 6
mid为6的排序: 1 1 3 4 5 9 2 6
mid为7的排序: 1 1 3 4 5 9 2 6
public static void quickSort(int[] arr,int low,int high){
System.out.print("low="+low+" high="+high+"的排序: ");
printArray(arr);
System.out.println();
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
temp = arr[low];
while (i<j) {
while (temp<=arr[j]&&i<j) {
j--;
}
while (temp>=arr[i]&&i<j) {
i++;
}
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[low] = arr[i];
arr[i] = temp;
quickSort(arr, low, j-1);
quickSort(arr, j+1, high);
}
low=0 high=7的排序: 3 1 4 1 5 9 2 6
low=0 high=2的排序: 1 1 2 3 5 9 4 6
low=0 high=-1的排序: 1 1 2 3 5 9 4 6
low=1 high=2的排序: 1 1 2 3 5 9 4 6
low=1 high=0的排序: 1 1 2 3 5 9 4 6
low=2 high=2的排序: 1 1 2 3 5 9 4 6
low=2 high=1的排序: 1 1 2 3 5 9 4 6
low=3 high=2的排序: 1 1 2 3 5 9 4 6
low=4 high=7的排序: 1 1 2 3 5 9 4 6
low=4 high=4的排序: 1 1 2 3 4 5 9 6
low=4 high=3的排序: 1 1 2 3 4 5 9 6
low=5 high=4的排序: 1 1 2 3 4 5 9 6
low=6 high=7的排序: 1 1 2 3 4 5 9 6
low=6 high=6的排序: 1 1 2 3 4 5 6 9
low=6 high=5的排序: 1 1 2 3 4 5 6 9
low=7 high=6的排序: 1 1 2 3 4 5 6 9
low=8 high=7的排序: 1 1 2 3 4 5 6 9