黑马程序员----排序算法分析与总结

来源:互联网 发布:淘宝好评评语 编辑:程序博客网 时间:2024/06/15 02:13

                                                                                              第一讲:排序的原理以及代码的实现

排序算法原理:

(1) 选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序 方法。
(2)冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序

代码的实现过程:

/*

以下为选择排序算法

*/

class selectSort{

   publicstaticvoid sort (int arr[]){

         for(int x=0;x<arr.length-1;x++){

            for(int y=x+1;y<arr.length;y++){//开始arr[y]为数组第二个元素.以后每排序

                  if(arr[x]>arr[y]){//一次,获取arr[y]及以后数组最大的一个,

                      int temp;//作为arr[x]的值,然后将Y后移一位,直到遍历完

                             temp=arr[x];

                            arr[x]=arr[y];

                            arr[y]=temp;

                      }

                  }

              }

         }

      publicstaticvoid printarr(int[] arr){

           for(int x=0;x<arr.length-1;x++){

             if(x!=arr.length){

                 System.out.print(arr[x]+",");

                  }

           }

    }

       publicstaticvoid main(String[] args) {

        int[] arr={1,4,6,8,5,9};

         printarr(arr); System.out.println();

        sort(arr);

        printarr(arr);

    }

 }

/*

以下为冒泡排序算法

*/ 

 

 

class bubbleSort{

     publicstaticvoid sort (int arr[]){

         for(int x=0;x<arr.length;x++){

            for(int y=0;y<arr.length-x-1;y++){//-x:每一次比较元素减少,-1:避免角标出界

                if(arr[x]>arr[y]){

                int temp=arr[x];

                     arr[x]=arr[y];

                    arr[y]=temp;

                     }

                }

            }

        }

    publicstaticvoid printarr(int[] arr){//打印数组的函数

 

       for(int x=0;x<arr.length-1;x++){

          if(x!=arr.length){

               System.out.print(arr[x

             }

            }

       }

     publicstaticvoid main(String[] args) {

       int[] arr={1,4,6,8,5,9};//打印未排序之前的数

         printarr(arr); System.out.println();

        sort(arr); //打印排序后的数

        printarr(arr);

    }

}

                                                                                         第二讲:排序算法的分析

(1)排序算法的效率分析

    1.选择排序每一次从序列中选出一个最小的数出来,放在已经排好序列的后面,待排序的数减少一个,设需要排序的元素个数为N,则共需要N+N-1+N-2+N-3+.......

     +2+1,共需要N(N+1)/2次排序

    2.冒泡排序:每一次从元素的第一个开始,与相邻的元素比较,每一次比较把较大的数放在两个相邻的数后面,一轮比较下来,最大的数排到序列的最后,然后从序列的

       第二个元素开始重复第一次比较的规则排序,这样,剩余最大的数排在元素倒数第二个位置,重复下去,直到最后一个排序完,设需要排序的元素个数为N,则共需要N+

       N-1+N-2+N-3+.......  +2+1,共需要N(N+1)/2次排序

(2)排序算法实现方式大同小异,但是在不同场合下,选择不同的排序方式会使排序效率更高,例如在升序占多的元素中,选择冒泡排序效率更高,因为每次排序多数情况下,  不需要调换元素的位置

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0