java 排序算法

23 篇文章 1 订阅

package com.test;

/**冒泡排序**/

publicclassBubbleSelect {

   publicstaticvoid main(String[]args) {

      int a[]={-1,1,5,3,5,2,6,4};

      BubbleSelectb1=new BubbleSelect();

      b1.bublesort(a);

      System.out.println("插入排序法");

      b1.insertSelect(a);

      System.out.println("选择排序法");

      b1.selectSort(a);

   }

   /**冒泡排序*/

   publicvoid bublesort(intarr[]){

      for(inti=0;i<arr.length;i++){

        for(intj=i+1;j<arr.length;j++){

           if(arr[i]>arr[j]){

              inttemp=arr[i];

              arr[i]=arr[j];

              arr[j]=temp;

           }

        }

       

      } 

      for(inti=0;i<arr.length;i++){

        System.out.println(arr[i]);

      }

   }

   /**插入排序*/以后面数据为标准

   publicvoid insertSelect(intarr[]){

      intlen=arr.length;

      for(inti=1;i<len;i++){

        for(intj=0;j<i;j++){

           if(arr[j]>arr[i]){

           inttemp=arr[j];

           arr[j] =arr[i];

           arr[i]=temp;

           }

        }

      }    

      for(inti=0;i<arr.length;i++){

        System.out.println(arr[i]);

      }

   }

  /**选择排序*/(从数组中找出最小的来交换位置) 

   publicvoid selectSort(intarray[]){

      intlen=array.length;

      for(inti=0;i<len;i++){

        intmin=i;

        for(intj=i+1;j<len;j++){

           if(array[j]<array[min]){

            min =j;

           }

        }

        inttemp=array[min];

         array[min]=array[i];

         array[i] =temp;

      }

      for(inti=0;i<array.length;i++){

        System.out.println(array[i]);

      }

   }

}



快速排序

/**
* 快速排序算法
* @param arr
* @param left
* @param right
* @return
*/
private static int partition(int[] arr,int left,int right) {
     int key=arr[left];
     while(left<right) {
        while(left<right && arr[right]>=key) {
           right--;
        }
        arr[left]=arr[right];
        while(left<right && arr[left]<=key) {
           left++;
        }
        arr[right]=arr[left];
     }
     arr[left]=key;
     return left;
  }
/***

* @param arr
* @param left
* @param right
*/
public static void quickSort(int [] arr,int left,int right) {
     int pivot=0;
     if(left<right) {
        pivot=partition(arr,left,right);
        quickSort(arr,left,pivot-1);
        quickSort(arr,pivot+1,right);
     }
    for(int i=0;i<arr.length;i++){
    System.out.println(arr[i]);
    } 

  }


public static void HeapAdjust(int[] array, int parent, int length) {
   int temp = array[parent]; // temp保存当前父节点
   int child = 2 * parent + 1; // 先获得左孩子
   while (child < length) {
       // 如果有右孩子结点,并且右孩子结点的值大于左孩子结点,则选取右孩子结点
       if (child + 1 < length && array[child] < array[child + 1]) {  
           child++;  
       }
       // 如果父结点的值已经大于孩子结点的值,则直接结束 
       if (temp >= array[child])
           break;
       // 把孩子结点的值赋给父结点
       array[parent] = array[child];
       // 选取孩子结点的左孩子结点,继续向下筛选
       parent = child;
       child = 2 * child + 1;
   }
   array[parent] = temp;
}
public static void heapSort(int[] list) {
   // 循环建立初始堆 
   for (int i = list.length / 2; i >= 0; i--) {
       HeapAdjust(list, i, list.length - 1);
   }  
   // 进行n-1次循环,完成排序
   for (int i = list.length - 1; i > 0; i--) {
       // 最后一个元素和第一元素进行交换
       int temp = list[i];
       list[i] = list[0];
       list[0] = temp;
       // 筛选 R[0] 结点,得到i-1个结点的堆
       HeapAdjust(list, 0, i);
       System.out.format("第 %d 趟: \t", list.length - i);
       //printPart(list, 0, list.length - 1);
   }
 
   for(int i=0;i<list.length;i++){
    System.out.println(list[i]);
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值