zoukankan      html  css  js  c++  java
  • Java冒泡排序与快速排序笔记

    public class Sort {

           public static void sort() {

                  Scanner input = new Scanner(System.in);

                  int sort[] = new int[10];

                  int temp;

                  System.out.println("请输入10个排序的数据:");

                  for (int i = 0; i < sort.length; i++) {

                         sort[i] = input.nextInt();

                  }

                  for (int i = 0; i < sort.length - 1; i++) {

                         for (int j = 0; j < sort.length - i - 1; j++)                      {

                                if (sort[j] < sort[j + 1]) {

                                       temp = sort[j];

                                       sort[j] = sort[j + 1];

                                       sort[j + 1] = temp;

                                }

                         }

                  }

                  System.out.println("排列后的顺序为:");

                  for(int i=0;i<sort.length;i++){

                         System.out.print(sort[i]+"   ");

                  }

           }

           public static void main(String[] args) {

                  sort();

           }

    }

    public static int[] qsort(int arr[],int start,int end) {        
        int pivot = arr[start];        
        int i = start;        
        int j = end;        
        while (i<j) {            
            while ((i<j)&&(arr[j]>pivot)) {                
                j--;            
            }            
            while ((i<j)&&(arr[i]<pivot)) {                
                i++;            
            }            
            if ((arr[i]==arr[j])&&(i<j)) {                
                i++;            
            else {                
                int temp = arr[i];                
                arr[i] = arr[j];                
                arr[j] = temp;            
            }        
        }        
        if (i-1>start) arr=qsort(arr,start,i-1);        
        if (j+1<end) arr=qsort(arr,j+1,end);        
        return (arr);    
    }    
     
    public static void main(String[] args) {        
        int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321};        
        int len = arr.length-1;        
        arr=qsort(arr,0,len);        
        for (int i:arr) {            
            System.out.print(i+"\t");        
        }    
    }
     
    /*//////////////////////////方式二////////////////////////////////*/
    更高效点的代码:
    public<TextendsComparable<?superT>>
    T[]quickSort(T[]targetArr,intstart,intend)
    {
    inti=start+1,j=end;
    Tkey=targetArr[start];
    SortUtil<T>sUtil=newSortUtil<T>();
     
    if(start=end)return(targetArr);
     
     
    /*从i++和j--两个方向搜索不满足条件的值并交换
    *
    *条件为:i++方向小于key,j--方向大于key
    */
    while(true)
    {
    while(targetArr[j].compareTo(key)>0)j--;
    while(targetArr[i].compareTo(key)<0&&i<j)i++;
    if(i>=j)break;
    sUtil.swap(targetArr,i,j);
    if(targetArr[i]==key)
    {
    j--;
    }else{
    i++;
    }
    }
     
    /*关键数据放到‘中间’*/
    sUtil.swap(targetArr,start,j);
     
    if(start<i-1)
    {
    this.quickSort(targetArr,start,i-1);
    }
    if(j+1<end)
    {
    this.quickSort(targetArr,j+1,end);
    }
     
    returntargetArr;
    }
     
     
    /*//////////////方式三:减少交换次数,提高效率/////////////////////*/
    private<TextendsComparable<?superT>>
    voidquickSort(T[]targetArr,intstart,intend)
    {
    inti=start,j=end;
    Tkey=targetArr[start];
     
    while(i<j)
    {
    /*按j--方向遍历目标数组,直到比key小的值为止*/
    while(j>i&&targetArr[j].compareTo(key)>=0)
    {
    j--;
    }
    if(i<j)
    {
    /*targetArr[i]已经保存在key中,可将后面的数填入*/
    targetArr[i]=targetArr[j];
    i++;
    }
    /*按i++方向遍历目标数组,直到比key大的值为止*/
    while(i<j&&targetArr[i].compareTo(key)<=0)
    /*此处一定要小于等于零,假设数组之内有一亿个1,0交替出现的话,而key的值又恰巧是1的话,那么这个小于等于的作用就会使下面的if语句少执行一亿次。*/
    {
    i++;
    }
    if(i<j)
    {
    /*targetArr[j]已保存在targetArr[i]中,可将前面的值填入*/
    targetArr[j]=targetArr[i];
    j--;
    }
    }
    /*此时i==j*/
    targetArr[i]=key;//应加判断
     
    /*递归调用,把key前面的完成排序*/
    this.quickSort(targetArr,start,i-1);
     
     
    /*递归调用,把key后面的完成排序*/
    this.quickSort(targetArr,j+1,end);
    //两个递归应加判断
    }
  • 相关阅读:
    js 遍历数组对象求和
    小程序使用微信地址or小程序跳转设置页
    css内容渐入效果实现
    flutter实现文字超出最大宽度显示省略号
    flutter查看安全码SHA1
    Uncaught (in promise)
    小程序iphone蒙层滚动穿透
    map中使用箭头函数遇到的坑
    骨架屏css样式
    javascript(js)反转字符串
  • 原文地址:https://www.cnblogs.com/xiaohouye/p/11151168.html
Copyright © 2011-2022 走看看