简单的排序

本文详细介绍了五种基本排序算法的实现过程:冒泡排序、插入排序、选择排序、快速排序及归并排序,并提供了每种算法的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Oder {

    //交换array[a],array[b]的值
private void swap(int[] array,int a,int b){
  System.out.println("swap"+ a+","+b);
  if(a != b){
     array[a] = array[a] + array[b];
     array[b] = array[a] - array[b];
     array[a] = array[a] - array[b];
  }
  printA(array);
    }

private void printA(int[] array){
  for(int i = 0 ; i < array.length ; i++){
   System.out.print(array[i]+"  ");
  }
  System.out.println();
}
//冒泡排序
public void bubbleSort(int[] arr){
  for(int i = 0 ; i < arr.length ; i++){
   for(int j = 1 ; j < arr.length - i ; j++){
    if(arr[j - 1] > arr[j]){
     swap(arr,j,j-1);
    }
   }
  }
}
//插入排序
public void insectionSort(int[] arr){
  
  for(int i = 0 ; i < arr.length ; i++){
   for(int j = i ; j > 0 ; j--){
    if(arr[j] > arr[j-1]){
                   swap(arr,j,j-1);
    }
     }
  
  }
    }
//选择排序
public void selectionSort(int[] arr){
  
  int min = 0;
  for(int i = 0 ; i < arr.length - 1; i++){
   min = i;
   for(int j = i + 1 ; j < arr.length ; j++){
    if(arr[min] > arr[j]){
     min = j;
    }
   }
   swap(arr, i , min);
  }
}
//快速排序
public void quickSort(int[] arr, int l , int r){
  if( l < r ){
   int compValue = l;
   int rightPlace = partitions( arr , l , r , compValue);
   quickSort(arr , l , rightPlace - 1);
   quickSort(arr , rightPlace + 1 , r);
  }
}
   public int partitions(int[] arr, int l , int r , int m){
    int n =  l;
    int compValue = arr[m];
    swap(arr , m , r);
    for(int i = l ; i < r ; i++ ){
       if(arr[i] < compValue ){
        swap( arr , n , i);
        n++;
       }
    }
    swap( arr , n , r );
    return n;
   }
   //归并排序
   public List mergeSort(List l){
       List llist = new ArrayList();
       List rlist = new ArrayList();
       if(l.size()<=1){
        return l;
       }else{
     int middle = l.size()/2;
     for(int i = 0 ; i < middle ; i++){
      llist.add(l.get(i));
     }
     for(int i = middle ; i < l.size() ; i++ ){
      rlist.add(l.get(i));
     }
       }
       llist = mergeSort(llist);
       rlist = mergeSort(rlist);
       System.out.println(llist);
       System.out.println(rlist);
       List finalList = merge(llist,rlist);
       System.out.println(finalList);
       return finalList;
   }
   //让两个有序数组合并成依然有序的一个数组
   private List merge(List l, List r){
    List list = new ArrayList();
    for(int i = 0 ; l.size() != 0 && r.size() != 0 ; i++){
     if((Integer)l.get(0) > (Integer)r.get(0)){
      list.add(r.get(0));
      r.remove(0);
     }else{
      list.add(l.get(0));
      l.remove(0);
     }
    }
    if( l.size() == 0){
     for(Iterator iter = r.iterator(); iter.hasNext();){
      list.add(iter.next());
     }
    }else{
     for(Iterator iter = l.iterator(); iter.hasNext();){
      list.add(iter.next());
     }
    }
    return list ;
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值