冒泡排序

1、冒泡排序:
工作原理:依次相邻元素进行比较,将小数放在前面,大数放在后面,每一次扫描是将最大的数放在最右边,每次扫描完之后,下次扫描的个数减一,直到所有的数都放好位置。即第一次扫描:比较第一个数和第二个数,判断大小,小数在前,大数在后,
接着比较第二个数和第三个数,依次比较,直到最后一个数。此时最大的数在最后一个位置上了。第二次扫描:比较从第一个数和第二个数,判断大小,小数在前,大数在后,直到到倒数第二个数为止。同样的方法扫描n次。
本质是每扫描一次就拍好了一个最大值的位置,故叫做冒泡排序。

int [] a ={0,56,6,8,9,10};
int len = 6;
         //这里要明白
         for(int i=0;i<len-1;i++) {  //这层循环控制的是需要排序的数的个数,即控制扫面的轮数
                  Boolean  IsChange=false;//这是冒泡改进的地方,增加一个标志来判断是否已经提前排好序了   //这里要注意由于比较的是在一个循环下前一个数跟后一个数比较
                  for(int j=0;j<len-i-1;j++) {   //这层循环是控制每一轮扫描之后,将最大的数放在最右边
                    //这里的j<len-i-1要注意边界的原因,所以是j<len-i-1
                      if(a[j]>a[j+1]){ //相邻元素比较 ,交换
                          int temp=a[j];
                          a[j]=a[j+1];
                          a[j+1]=temp;
                          IsChange=true;//如果一次扫描完之后都没发生任何的交换,则表明已经排好序了
                      }
                  }
                  if(!IsChange){
                      System.out.println("结束排序"+a);
                      return;
                  }
             }

2、插入排序:

工作原理:通过构建将整个待排序的序列分成有序序列和无序序列,从无序序列当中选择一个元素插入待有序序列中。这里需要注意的是,最初将整个序列的第一个数作为有序序列,后面n-1个数作为无序序列。从无序序列选择第一个数开始插入有序序列中,插入的方式是从右向左开始扫描有序序列,最右边的数是有序序列中最大的数,依次比较,待排序的数比已排好的数小,则将已排好的数往后移,最后找出待插入的数合适的位置插入。

原文地址:https://www.cnblogs.com/lgg20/p/11138649.html