2.1 选择排序和冒泡排序

一、选择排序

 

   选择一个元素,依次与后面的元素相比较。

 

 

   如上图所示,arr[0]分别和数组的arr[0+1]arr[0+2],直至最后一个元素做比较,完成第一个循环;arr[1]分别和数组的第arr[1+1]arr[1+2],直至最后一个元素做比较....

   写程序的思路,可以先写第一层循环,再从第一层循环中提取出总结性的部分,放在上一层循环中。

   上一层循环使用for(x=0;x<arr.length-1;x++),用于确定是哪个元素在和后面的元素比较;

   里面的循环使用for(int i=x+1;i<arr.length;i++),用于确定是哪个元素是后面被比较的元素的起点;

   循环内部使用arr[x]arr[i]作比较。

         内存循环是用来控制该轮循环中被比较的元素的。

 

代码:

public static void sort(int[] arr)
{
     for(int x=0;x<arr.length-1;x++)
    {
             for(int i = 1+x;i<arr.length;i++)
            {
                   if(arr[x]>arr[i])
                  {
                       int temp = arr[x];
                       arr[x]=arr[i];
                       arr[i]=temp;
                   }
           }
     }
}

 

二、冒泡排序

 

   如上图所示,冒泡排序就是将相邻的2个元素进行比较。如果是从小到大排序,那么第一轮比较结束后,最大的元素被冒泡到最后;第二轮比较结束后,第二大的元素被冒泡到倒数第二个位置;如果是从大到小排序,那么最小的元素在第一轮比较结束后会被放到最后,以此类推。注意,不管是正序,还是倒叙,第一轮都是将最大/最小值放到最后的

   方法同上选择排序,第一轮排序,比较次数为arr.length-1次,第二轮为arr.length-2,以此类推。因此外层循环为for(int x =0;x<arr.length-1;x++)

   内层循环为for(int i=0;i<arr.length-1-x;i++) ,循环内部交换元素即可。

         内存循环是用于控制每一轮的比较次数的。

 代码:

static void sort(int[] arr)
{
         for(int x=0;x<arr.length-1;x++)
         { 
                for(int i=0;i<arr.length-1-x;i++)
                {
                         if(arr[i]>arr[i+1])
                         {
                                int temp = arr[i];
                                arr[i]=arr[i+1];
                                arr[i+1]=temp;
                         }
               }
        }
}

posted @ 2017-09-20 17:21  忘记木槿  阅读(183)  评论(0编辑  收藏  举报