几个排序算法(java版)
程序员文章站
2022-03-08 16:26:39
...
//改进的冒泡算法 public class 改进的冒泡算法 { public static void main(String args[]){ int a[]={2,6,4,3,28,9,43,21,89,23}; bubblesort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static void bubblesort(int arr[]){ boolean b =false; int temp; for(int i = 1;i<arr.length;i++){ //下标从第二个数开始,所以是1 b=false; for(int j=arr.length-1;j>=i;j--){ if(arr[j]<arr[j-1]){ //满足条件时,交换 temp = arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; b = true; } } if(!b){ break; } } } } //快速排序算法1 public class 快速排序算法 { public static void main(String args[]){ int a[]={23,6,7,88,76,65,44,338,59}; quicksort(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static void quicksort(int arr[],int low,int high){ int i,j,k; //三剑客的约定 if(low<high){ //先决条件 i = low; j = high; k= arr[i]; //找到适合位置 while(i<j){ while(i<j&&arr[j]>k){ j--; } if(i<j){ arr[i]=arr[j]; i++; } while(i<j&&arr[i]<k){ i++; } if(i<j){ arr[j]=arr[i]; j--; } } arr[i]=k; //装到适合的位置 quicksort(arr,low,i-1); //递归 quicksort(arr,i+1,high); //递归 } } } //快速排序算法2 public class 快速排序2 { public static void main(String ag[]){ int a[]={23,6,7,88,76,65,44,338,59}; quicksort2(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static void quicksort2(int arr[],int low,int high){ if(low<high){ //条件 int i=partion(arr,low,high); //合适位置的获得 quicksort2(arr,low,i-1); quicksort2(arr,i+1,high); } } public static int partion(int arr[],int low,int high){ //目的是找到一个合适的位置和置一个数! int temp = arr[low]; //得到要置的数 if(low<high){ int k=arr[low]; int mid=(low+high)/2; while(low<high&&k<arr[high]){ high--; } if(low<high){ arr[low]=arr[high]; low++; } while(low<high&&k>arr[low]){ low++; } if(low<high){ arr[high]=arr[low]; high--; } } arr[low]=temp; //置数 return low; } } //归并排序 public class 归并排序算法 { public static void main(String[] args) { int a[]={23,6,7,88,76,65,44,338,59}; mergesort(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static void mergesort(int arr[],int start,int end){ //主函数 if(start<end){ int mid = (start+end)/2; //关键一步 mergesort(arr,start,mid); //递归 mergesort(arr,mid+1,end); //递归 merge(arr,start,mid,mid+1,end); //调用下面的函数 } } public static void merge(int arr[],int start1,int end1,int start2,int end2){ //被调用的函数 int i , j, k=0; //临时变量的使用 i = start1; j=start2; int temp[] = new int[end2-start1+1]; //临时数组的大小规格 while(i<=end1&&j<=end2){ if(arr[i]>arr[j]){ temp[k++]=arr[j++]; }else { temp[k++]=arr[i++]; } } //把剩下的元素依次放入临时数组中 while(i<=end1){ temp[k++]=arr[i++]; } while(j<=end2){ temp [k++]=arr[j++]; } //归还到原来的数组中去 k = start1; for(int element :temp){ arr[k++]=element; } } }
上一篇: 《转》删除文件夹下svn版本信息