详细总结各种排序算法(Java实现)

  

  

<强> 1。直接插入排序

  

思想:将第i个插入到前张个中的适当位置

  

时间复杂度:T (n)=O (n²)。

  

空间复杂度:年代(n)=O (1)。

  

稳定性:稳定排序。

  

详细总结各种排序算法(Java实现)

  

如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。

  

所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定

  

哨兵有两个作用:

  

①进人查找(插入位置)循环之前,它保存了R(我)的副本,使不致于因记录后移而丢失R(我)的内容;

  

②它的主要作用是:在查找循环中“监视“下标变量j是否越界。一旦越界(即j=0),因为R[0]。可以和自己比较,循环判定条件不成立使得查找循环结束,从而避免了在该循环内的每一次均要检测j是否越界(即省略了循环判定条件j>=1)

        公共空间insertSort (int[]数组){   for (int i=1; i< array.length;我+ +)//第0位独自作为有序数列,从第1位开始向后遍历   {   如果(array[我]& lt;数组(张))//0 ~张位为有序,若我第位小于张位,继续寻位并插入,否则认为0 ~我位也是有序的,忽略此次循环,相当于继续   {   int temp=array[我];//保存我第位的值   int k=i - 1;   for (int j=k; j>=0,,temp<数组[j]; j -)//从张第位向前遍历并移位,直至找到小于第我位值停止   {   array [j + 1]=array [j];   k,;   }   数组(k + 1)=temp;//插入第我位的值   }   }   }      

<强> 2。折半插入排序

  

思想:将数据插入到已经排好序的序列中,通过不断与中间点比较大小来确定位置

  

时间复杂度:比较时的时间减为O (n㏒n),但是移动元素的时间耗费未变,所以总是得时间复杂度还是O (n²)。

  

空间复杂度:年代(n)=O (1)。

  

稳定性:稳定排序。

  

<强> 3。希尔排序

  

思想:又称缩小增量排序法。把待排序序列分成若干较小的子序列,然后逐个使用直接插入排序法排序,最后再对一个较为有序的序列进行一次排序,主要是为了减少移动的次数,提高效率。原理应该就是从无序到渐渐有序,要比直接从无序到有序移动的次数会少一些。

  

时间复杂度:O (n的1.5次方)

  

空间复杂度:O (1)

  

稳定性:不稳定排序。{2、4、1、2},2和1一组4和2一组,进行希尔排序,第一个2和最后一个2会发生位置上的变化。

  

详细总结各种排序算法(Java实现)

        公共静态void main (String [] args)   {   int[]={49岁,38岁,65年,97年,76年,13日,27日,49岁,78年,34岁,12日,64年,1};   System.out.println(“排序之前:”);   for (int i=0; i      

  

<强>

  

时间复杂度:T (n)=O (n²)。

  

空间复杂度:年代(n)=O (1)。

  

稳定性:稳定排序。

  

详细总结各种排序算法(Java实现)

        公开课BubbleSort   {   公共空间排序(int [])   {   int temp=0;   for (int i=3ざ? 1;我在;0;——我)   {   for (int j=0;j & lt;我;+ + j)   {   如果([j + 1] & lt;[j])   {   temp=[j];   一个[j]=[j + 1);   [j + 1)=temp;   }   }   }   }   }      

<强>

  

思想:对冒泡排序的改进,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

详细总结各种排序算法(Java实现)