写日志的时候总结了Java的一些排序方法,不过感觉不多,只找到的有选择排序、冒泡排序、快速排序、插入排序、希尔排序。欢迎大家补充。
1、选择排序:
头角标与后面每个元素比较,如果符合条件换位。 public static void selectSort(int[] arr){ for(int x=0;x<arr.length-1;x++){ for(int y=x+1;y<arr.length;y++){ if(arr[x]>arr[y]){ int tmp=arr[x]; arr[x]=arr[y]; arr[y]=tmp; } } } } 2、冒泡排序:
相邻的两个元素进行比较,如果符合条件换位 public static void bubbleSort(int[] arr){ for(int x=0;x<arr.length-1;x++){ for(int y=0;y<arr.length-x-1;y++){ //减x的原因是每次y比较次数在减少 if(arr[y]>arr[y+1]){ int tmp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=tmp; } } } } 3、快速排序:
先选择一个值(本例选的是中间值),并依次找出左边比中间值大的与右边比中间值小的,并进行对调,每一轮两边同时进行,直到角标交错时停止,并用递归的形式一直调用函数,直到结束。 public void quickSort(String[] strDate,int left,int right){ String middle,tempDate; int i,j; i=left; j=right; middle=strDate[(i+j)/2]; do{ while(strDate.compareTo(middle)<0&& i<right) i++; //找出左边比中间值大的数 while(strDate[j].compareTo(middle)>0&& j>left) j--; //找出右边比中间值小的数 if(i<=j){ //将左边大的数和右边小的数进行替换 tempDate=strDate; strDate=strDate[j]; strDate[j]=tempDate; i++; j--; } }while(i<=j); //当两者交错时停止 if(i<right){ quickSort(strDate,i,right); } if(j>left){ quickSort(strDate,left,j); } }
|