黑马程序员技术交流社区
标题: Java排序总结(1) [打印本页]
作者: 徐梦侠 时间: 2012-10-12 00:04
标题: Java排序总结(1)
写日志的时候总结了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);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |