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);
    //两个递归应加判断
    }
  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/xiaohouye/p/11151168.html
Copyright © 2011-2022 走看看