您的位置:首页 > 其它

学习笔记1:冒泡排序, 快速排序

2011-03-25 12:35 267 查看
冒泡排序:

每一次都从数组的最后一位开始两两比较,将值比较小的放前面,值大的放后面。每次都是把轻的气泡往上浮。第一轮比较结束之后,最轻的气泡就到了数组的第一位。接着比较数组的最后一位到数组的第二位,以此类推。

如果有一轮比较过程中,没有发生一次交换,那么说明所有的数都是排好序的。那么可以跳出循环,结束比较。

//Java 代码实现

public class BubbleLeos {

 
 public static void main(String[] args) {

  //定义整形数组

  int[] data={5,2,9,1,0,11,23,4,55,98,6};

   B_Sort(data);

 //数组的下标为0到10时, 数组的length值为11,注意数组越界异常。

 //打印排序好的数组

  for(int k=0;k<data.length;k++){
   System.out.print(data[k]+"; ");
  }

 }

 

 private static void B_Sort(int[] sort){
  

   int len = sort.length;
   int i;
  

   //如果数组有11个数的话,那么最多需要比较10轮,i从0~9正好10次。

   for(i=0;i<len-1;i++){

   //设置布尔变量,如果两两比较过程中没有发生交换,那么isChange的布尔值为false,此时数组已经有序,不需要下一轮的比较。结束循环
   Boolean isChange=false;

 

  //从数组尾部开始两两比较,一直比较到第i个
   for(int j=len-1;j>i;j--){

    //交换,把值小的放前面,大的放后面
    if(sort[j]<sort[j-1]){
     int temp = sort[j-1];
     sort[j-1]=sort[j];
     sort[j]=temp;

     //发生交换之后,将isChange布尔值设置为trues
     isChange=true;
    }
   }

 

   //如果在某一轮的比较中,没有发生交换,那么说明数组已经有序,结束外层循环。排序完成。
   if(!isChange){
    break;
   }
  }
 }
}

 

 

快速排序

第一步选定一个值作为 中心点(pivot)值;

第二步将 中心点(pivot) 左边的数依次跟 pivot 进行比较,发现比 pivot 大的数就交换位置;

第三步将 中心点(pivot) 右边的数依次跟 pivot 进行比较, 发现比 pivot 小的数就交换位置;

重复第二步和第三步,一直到 中心点 左边的数 都比 中心点右边的数小为止。

此时数据被分为左右两部分,分别对左右两部分数组进行 第一步,第二步,第三步操作;

通过递归调用,最终完成数组的排序。

public class QuickSort {

 public static void main(String[] args) {

  int[] array={9,1,8,2,7,4,3,6,11,21,33};
  qsort_asc(array,0,10);
  for(int k=0;k<=array.length-1;k++){
   System.out.print(array[k]+";");
  }
  
 }
 private static void qsort_asc(int data[], int low, int high) { 
        int i, j, x; 
        if (low < high) { // 递归结束条件,这步很重要!
            i = low; 
            j = high; 
            x = data[i]; 
            while (i < j) {  //循环比较,这步也很重要!
                while (i < j && data[j] > x) { 
                    j--;
                } 
                if (i < j) { 
                    data[i] = data[j]; 
                    i++; 
                } 
                while (i < j && data[i] < x) { 
                    i++;
                } 
                if (i < j) { 
                    data[j] = data[i]; 
                    j--; 
                } 
            }  // 结束while(i<j)的循环比较

            data[i] = x;  
            qsort_asc(data, low, i - 1); 
            qsort_asc(data, i + 1, high); 

        }  //结束if (low < high)判断。
    } 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pivot string class