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个数作为无序序列。从无序序列选择第一个数开始插入有序序列中,插入的方式是从右向左开始扫描有序序列,最右边的数是有序序列中最大的数,依次比较,待排序的数比已排好的数小,则将已排好的数往后移,最后找出待插入的数合适的位置插入。