排序的思想就是維護乙個有序的部分,將無序部分的資料按照順序插入到有序部分。
通俗的講,插入排序的原理就是:
先將最後乙個元素作為有序部分,前面元素作為無序部分,將倒數第二個元素和最後乙個元素比較,如果倒數第二個元素大於最後乙個元素,則將倒數第二個元素查到最後乙個元素的位置。
此時無序部分是第乙個元素到倒數第三個元素,有序部分是最後兩個元素。
再將倒數第三個元素按照順序插入到最後兩個元素中,使得最後三個元素成為有序部分。
重複上面的插入規則,直到無序部分為空為止。
/**
*@title: insertsort
*@description: 插入排序
*@param: array
*/public
static
void
insertsort(int array)
}// 將待插入元素插入到有序部分
if (k != j - 1)
}}/**
*@title: insertitem
*@description: 把陣列array下標為i的元素插入到下標為j的位置
*@param: array
*@param: i
*@param: j
*/private
static
void
insertitem(int array, int i, int j)
array[j] = temp;
}
從**中可以看出一共遍歷了n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = 0.5 * n ^ 2 - 0.5 * n,那麼時間複雜度是o(n^2)。
因為在有序部分元素和待插入元素相等的時候,可以將待插入的元素放在前面,所以插入排序是穩定的。
常用排序演算法穩定性 時間複雜度
首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資料其在序列中的先後位置順序與排序後它們兩個先後位置順序相同。再簡單具體一點,如果a i a j,ai 原來在 aj 位置前,排序後 ai 仍然 是在 aj 位置前。下面我們分析一下穩定性的好處 1 如果排序演算法是穩定的,那...
排序演算法時間複雜度 空間複雜度 穩定性整理
涉及排序演算法包括 簡單選擇排序 直接插入排序 希爾排序 歸併排序 氣泡排序 快速排序 堆排序 基數排序 時間複雜度 快些以nlogn的速度歸隊 此句表示時間複雜度為o nlogn 的排序,快 表示快速排序,些 表示希爾排序,歸 表示歸併排序,隊 表示堆排序,其他排序均為o n 特殊的基數排序為o ...
排序演算法的複雜度和穩定性
本文簡單介紹幾種面試中常用的排序演算法,並對每個演算法的時間複雜度 空間複雜度 穩定性進行分析。1 氣泡排序 void swap int num1,int num2 void bubblesort int array,int size int main int argc,const char arg...