快速排序
氣泡排序
插入排序
插入排序是最簡單最直觀的排序演算法,它的依據是:遍歷到第n個元素的時候前面的n-1個元素已經是排序好的了,那麼就查詢前面的n-1個元素把這第n個元素放在合適的位置,如此下去直到遍歷完序列的元素為止.
演算法的複雜度也是簡單的,排序第乙個需要1的複雜度,排序第二個需要2的複雜度,因此整個的複雜度就是
1 + 2 + 3 + ... + n = o(n ^ 2)的複雜度.
直接插入排序(straight insertion sort)的作法是:
每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。
第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。
直接插入排序屬於穩定的排序,時間複雜性為o(n^2),空間複雜度為o(1)。
#includevoid insert_sort(int *a,int n)
a[j] = temp;//a[j]已經是空的了,即要插入的位置 }}
int main()
; int count = sizeof(arr)/sizeof(int);
insert_sort(arr,count);
for(int i = 0;i < count; i++)
return 0;
}
希爾排序
#includeusing namespace std;
void shell(int *a,int n)
a[j+d]=x;
} d /= 2;}}
int main()
; int count = sizeof(arr)/sizeof(int);
shell(arr,count);
for (int i=0; i < count;i++)
return 0;
}
氣泡排序 選擇排序 插入排序 希爾排序 快速排序
這張圖映象了,當然也可以看明白,再賦另一張圖 快速排序 定乙個基準點,一般以左側為基準點,兩個指標 i,j右側 先j 左,遇到小於基準點停下,再i 右,遇到大於基準點,交換兩個元素。再次 移動j和i相同操作,直到j i,這時交換這個點和基準點,這個時候,陣列排序 左側為 小於基準點,右側大於基準點。...
插入排序 選擇排序 氣泡排序 希爾排序
引入概念 排序穩定性 輸入資料的順序,排序後不能改變。例如,1,2,3,3,5.排序完若第乙個3和第二個3互換,則為不穩定。1.插入排序 穩定 解釋 像打撲克時整理牌時一樣,遇到小牌就插在前面比他大的前面,而後面的牌順次後移 直到處理完最後一張牌。優點 比氣泡排序只能處理相鄰資料更為靈活,適用於資料...
氣泡排序,插入排序,選擇排序,希爾排序
在另外的文章中介紹了快速,堆,歸併排序,這三個排序都是高效的排序,下面介紹一些時間複雜度為o n 2 的排序。氣泡排序,顧名思義,就是將小的元素往上冒,大的元素往下沉,實際在變成的時候用的是大的元素往下沉的方法。每一趟過後,都有乙個最大的元素被沉到底。下一次排序時陣列規模減少了1。主要應用到了相鄰兩...