经典排序——插入排序

插入排序:是利用第1次排序到第p次排序,位置0p-1上的位置都是排序好的。数组

这样只要比较一下[i-1][i]就知道还要不要进入第2个循环。spa

若是[i-1]>[i]那么就要继续进入第二个循环。排序

将这个位置的[i]存起来temp;在令j=i;开始循环交换位置,temp[j]=temp[j-1]ast

这个时候进行下一步判断,temp[j-1]>temp,若是true继续交换,若是false,让test[j]=temp;便可test

数组34,8,64,51,32,21循环

先比较34,8看要不要进入第二个循环,34>8,进入数据

交换34,8的位置  8,34 由于j--的缘由j=0,退出循环,static

i++,比较34,64   34<64不用进入co

i++,比较64,51 64>51进入第二次循环。交换位置,8,34,64,64,虽然j-->0,可是temp[j-1]<temp同样退出循环,进行test[j]=temp,8,34,51,64void

i++,比较64,32 64>32进入第二个循环,交换位置是这样的8.3451,64,64

要明白这个8,34,51,64,64。是利用这个才实现将元素的插入的。找到一个元素,也想这个元素在前边排序的中间,正是由于这个才能准确

的这个元素插入到准确的位置。

而且也不能将test[j-1]>test作成if的判断条件,由于即便没有产生交换也会形成j--从而不能排序不说,整个数组的数据都发生了变化。

代码以下:

public static void fastSortT(int [] test){
   for(int i=1;i<test.length;i++){
    if(test[i-1]>test[i]){//由于每次排序都会将前边的i-1个数排序,因此只要比较一个前边排序的最后一个就能够了,若是最大的也要小的话
     //那就不要排序了,直接就是这样了,只有最后一个比他要大才会细分。
     int temp = test[i];//将test[i]这个数保存起来。
     int j;
     for(j=i;j>0&&test[j-1]>temp;j--){
      test[j]=test[j-1];
     }
                    test[j] = temp;    }   }  }

相关文章
相关标签/搜索