双向冒泡排序算法-Java实现
算法思想:
类似于冒泡排序
首先是定义两个边界即left和right
其次通过left右移进行冒泡排序,即将最左边数据与之后数据的不断比较交换,直到第一个数据为最小,之后left++;
right的操作与left类似且对称
结合条件:left>=right时循环中断
代码实现:
public int[] doubleBubbleSort(int []array){
int []arr=array;
int left=0;right=arr.size()-1;
while(left<right){
for(int i=left+1;i<=right;i++){
if(arr[left]>arr[i]){
int tmp=arr[i];
arr[i]=arr[left];
arr[left]=tmp;
}
}
left++;
for(int i=right-1;i>=left;i--){
if(arr[right]<arr[i]){
int tmp=arr[i];
arr[i]=arr[right];
arr[left]=tmp;
}
}
right++;
}
return arr;
}
同样的,该方法对于列表一样适用
只需要调用列表的set方法实现内部数据的调换即可
范例
public List<Student> doubleBubbleSort(List<Student> studentList){
List<Student> list=studentList;
Student student=null;
int left=0,right=studentList.size()-1;
while(left<right)
{
for(int i=left+1;i<=right;i++){
if(list.get(left).getSum()<list.get(i).getSum()){
student=list.get(i);
list.set(i,list.get(left));
list.set(left,student);
}
}
left++;
for(int i=right-1;i>=left;i--){
if(list.get(right).getSum()>list.get(i).getSum()){
student=list.get(i);
list.set(i,list.get(right));
list.set(right,student);
}
}
right--;
}
return list;
}
当然,其中的比较还是数字的比较。