1.冒泡
public static void Mppai(int[] a){
int temp;
swap(a);
for(int i = 0; i<a.length-1; i++ ){
for(int j = 0; j<a.length-i-1; j++) {
if(a[j] > a[j+1]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
swap(a);
}
public static void swap(int[] arr){
for(int i :arr){
System.out.print(i+" ");
}
}
2.快速
public static void kuaisu(int[] a){
int temp;
swap(a);
for(int i = 0 ; i < a.length ; i ++){
temp = i;
for(int j = i + 1 ; j < a.length ; j++){
if(a[temp] > a[j] ) {
temp = j;
}
}
slap(a,i ,temp);
}
swap(a);
}
public static void swap(int[] arr){
for(int i :arr){
System.out.print(i+" ");
}
}
public static void slap(int[] arr , int i , int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp ;
}
3.插入
public static void charu(int arr[]){
swap(arr);
for(int i = 1 ;i < arr.length ; i++) {
int key = arr[i] ;
int j = i - 1 ;
while( j >= 0 && arr[j] > key ){
arr[j+1] = arr[j] ;//大数后退
j--;
}
arr[j+1] = key ;
}
swap(arr);
}
public static void swap(int[] arr){
for(int i :arr){
System.out.print(i+" ");
}
}
4.希尔
public static void xier(int arr[]){
int d = arr.length;
swap(arr);
while(true) {
d = d / 2 ; //每次分组区间为之前的一半
for (int i = 0; i < d; i++) {
//进入快排;
for(int j = i + d ; j < arr.length ; j++){
int tmp = arr[j];
int x = j - d;
while(x >= 0 && arr[x] > tmp ){
arr[x + d] = arr[x];
x = x - d ;
}
arr[x+d] = tmp ;
}
swap(arr);
if (d == 1){
break;
}
}
}
}
public static void swap(int arr[]) {
for (int a : arr) {
System.out.print(a);
}
}
5.归并
public static void g(int arr[] , int left ,int right){
if(left < right){
int mid = (left + right) / 2 ;
g(arr , left ,mid); //两边不断拆分
g(arr , mid + 1 ,right); //两边不断拆分
b(arr , left , right , mid);
}
}
public static void b(int arr[], int left , int right , int mid){
int i = left ;
int j = mid + 1 ;
int t = 0;
int tmp[] = new int[arr.length];
while(i <= mid && j <= right ){
System.out.print("=============("+t+") " +"("+i+") "+"("+j+") "+"\n");
if(arr[i] <= arr[j]){
tmp[t++] = arr[i++];
}else{
tmp[t++] = arr[j++];
}
System.out.print("=============("+t+") " +"("+i+") "+"("+j+") "+"\n");
swap(tmp);
System.out.print("============="+"\n");
}
while(i<=mid){//将左边剩余元素填充进temp中
tmp[t++] = arr[i++];
}
while(j<=right){//将右序列剩余元素填充进temp中
tmp[t++] = arr[j++];
}
t = 0;
//将temp中的元素全部拷贝到原数组中
while(left <= right){
arr[left++] = tmp[t++];
}
}
public static void swap(int[] arr){
for(int i :arr){
System.out.print(i+" ");
}
System.out.println();
}
}
6.快速
7汉诺塔
def move(n, a, b, c):
if n ==1:
print a, '-->', c
return
move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c)
move(4, 'A', 'B', 'C')