插入排序偽代碼
『壹』 用自然語言/程序流程圖/偽碼表示一種排序演算法。(冒泡排序/插入排序)
『貳』 c語言插入排序法
你拿幾個數模擬一下就看到了。whille里的循環是負責每趟將最小的數排到它該在的位置,即第i趟循環是保證從0到i的元素單調增排列。temp是用來記錄當前i中的元素,有可能while執行一次a[i]處就有了新元素,值就改變了,然而temp還要繼續和前面的比較看看是不是仍要往前插入,這個循環一直是while在做
『叄』 c語言插入排序法,哪位高人舉個例子,直接插入的那種
你手裡有一張牌,A,接起一張Q,插入手中,你發現Q比A小,把它放在了A前面。專又接起一屬張K,你先發現K比Q大,然後又發現K比A小,把K放在A前面。
這里有3個插入動作。我來解釋一下
當插入第一個元素時,數組a[0]直接賦值A。因為不需要比
插入第二個時需要循環,從0到當前元素的個數··可寫一個getsize()的函數 一個一個去比較。如果手中的牌key比元素大時,用continue跳過,如果key比元素a[i]小,則a[i]後面的所有元素向後移一位把key放在原來a[i]的地方。
ok如果你的數組是動態分配的,那麼期間還需要使用realloc(size+1)的內存操作。插入成功後,size也要+1.說完了
『肆』 演算法入門插入排序法(演算法導論裡面的偽代碼)看不懂
for j = 2 to A.length 就是j從2循環到A.length的意思,A.length就是數組A的長度。
這句相當於for(j=2;j<=A.length;j++)
『伍』 想問您一些排序演算法的偽代碼,謝啦
冒泡排序:網頁鏈接
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。一個優秀的演算法可以節省大量的資源。在各個領域中考慮到數據的各種限制和規范,要得到一個符合實際的優秀演算法,得經過大量的推理和分析。
C++自帶的algorithm庫函數中提供了排序演算法。
穩定的
冒泡排序(bubble sort) — O(n^2)
雞尾酒排序(Cocktail sort,雙向的冒泡排序) — O(n^2)
插入排序(insertion sort)— O(n^2)
桶排序(bucket sort)— O(n); 需要 O(k) 額外空間
計數排序(counting sort) — O(n+k); 需要 O(n+k) 額外空間
合並排序(merge sort)— O(nlogn); 需要 O(n) 額外空間
原地合並排序— O(n^2)
二叉排序樹排序 (Binary tree sort) — O(nlogn)期望時間; O(n^2)最壞時間; 需要 O(n) 額外空間
鴿巢排序(Pigeonhole sort) — O(n+k); 需要 O(k) 額外空間
基數排序(radix sort)— O(n·k); 需要 O(n) 額外空間
Gnome 排序— O(n^2)
圖書館排序— O(nlogn) with high probability,需要 (1+ε)n額外空間
不穩定的
選擇排序(selection sort)— O(n^2)
希爾排序(shell sort)— O(nlogn) 如果使用最佳的現在版本
組合排序— O(nlogn)
堆排序(heapsort)— O(nlogn)
平滑排序— O(nlogn)
快速排序(quicksort)— O(nlogn) 期望時間,O(n^2) 最壞情況; 對於大的、亂數列表一般相信是最快的已知排序
Introsort— O(nlogn)
耐心排序— O(nlogn+k) 最壞情況時間,需要 額外的 O(n+k) 空間,也需要找到最長的遞增子串列(longest increasing subsequence)
不實用的
Bogo排序— O(n×n!) 期望時間,無窮的最壞情況。
Stupid sort— O(n^3); 遞歸版本需要 O(n^2) 額外存儲器
珠排序(Bead sort) — O(n) or O(√n),但需要特別的硬體
Pancake sorting— O(n),但需要特別的硬體
stooge sort——O(n^2.7)很漂亮但是很耗時
『陸』 用自然語言,程序流程圖,偽代碼分別描述冒泡排序,選擇排序和插入排序,並用C語言闡述
int a[]={33,76,26,88,15,92,37,49},i,j.k;
for(i=0;i<7;i++)
for(j=i+1;j<8;j++)
if(a[i]>a[j])
{k=a[i];a[i]=a[j];a[j]=k;}
『柒』 求寫出使用插入排序演算法進行排序的偽代碼
偽代碼如下
INSERTION-SORT(A)
1forj← 2tolength[A]
2dokey←A[j]
3InsertA[j] into the sorted sequenceA[1..j-1].
4i←j-1
5whilei>0 andA[i] >key
6doA[i+1] ←A[i]
7i←i-1
8A[i+1] ←key
C語言代碼如下
void insertion_sort(int array[],int first,int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;
//與已排序的數逐一比較,大於temp時,該數移後
while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp;
}
}