插入排序C語言實現程式碼
程式碼改自演算法導論第三版,使用C語言實現,插入排序的複雜度為O(n^2),在資料較少時效率較高,資料較多應使用歸併排序。如果要逆序輸出,可以將A[i]>key中的>換成<;<span style="font-size:18px;">#include<stdio.h> void main() { int A[6]={5,2,4,6,1,3}; int i,j,key; for(j=1;j<6;j++) { key=A[j];//從右側牌堆中抓一張key牌,key牌即手中抓的將要插入的牌 i=j-1;//與key牌左側第一張牌比較 while((i>=0)&&(A[i]>key))//一直比較,將較小的牌移至左側 { A[i+1]=A[i]; i=i-1; }//key牌此時一直在手中,未插入 A[i+1]=key;//插入key牌 } for(i=0;i<6;i++) { printf("%d\n",A[i]); } }</span>
相關推薦
插入排序C語言實現程式碼
<span style="font-size:18px;">#include<stdio.h> void main() { int A[6]={5,2,4,6,1,3};
快速排序的c語言實現程式碼
快速排序的基本思想就是選擇一個基準元素,通常選擇第一個元素或者最後一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。 具體程式碼如下: //快速排序實現 #
排序(3)---------冒泡排序(C語言實現)
std 強調 tracking i++ oid printf pre rand() 執行 說到冒泡排序,大一的時候第一次學習這個排序算法,可能大家不知道,“冒泡”在我說的方言裏面是吹牛逼的意思。所以就認為這個排序算法特吹牛逼有木有。 相信大家對全部的排
直接插入排序——C語言
插入排序是最簡單的一種排序方法。它的基本操作就是將一個記錄插入到已排好序的有序表中,從而得到一個新的、記錄數增1的有序表。 直接插入排序時,我們將第二個陣列元素作為插入數,第一個數作為有序陣列。逐個比較兩者大小,最後將數插入到合適位置。 程式碼實現: /**插入排序**
資料結構線性表順序結構c語言實現程式碼
#include<stdio.h> #include<stdlib.h> typedef int ElementType; typedef struct LNode * PtrToLNode; struct LNode{ ElementType D
“直接插入排序”C++/python實現
對一組資料進行插入排序的方法是: 1)假定一組資料的第一個是有序的,剩下的是無序的。 2)從無序資料中取第一個,與有序資料組相比較,插入到有序資料中。 3)從無序資料再取第一個,與有序資料組相比較,插入到有序資料中。 4)無序資料中取完,即排序完成。 比如:3 ,7
特殊排序 C語言實現
題目描述 輸入一系列整數,將其中最大的數挑出,並將剩下的數進行排序。 輸入描述 輸入第一行包括1個整數N,1<=N<=1000,代表輸入資料的個數。 接下來的一行有N個整數。 輸出描述 可能有多組測試資料,對於每組資料, 第一行輸出一個整數,代表N個整數中
【演算法】希爾排序C語言實現
上一篇文章我們一起學習了直接插入排序,它的原理就是把前i個長度的序列變成有序序列,然後迴圈迭代,直至整個序列都變為有序的.但是說來說去它還是一個時間複雜度為(n^2)的演算法,難道就不能再進一步把時間複雜度降低一階麼?可能有很多同學說快速排序,堆排序,我都會,這些簡單的插
排序(6)---------歸併排序(C語言實現)
歸併排序: 歸併操作,也叫歸併演算法,指的是將兩個已經排序的序列合併成一個序列的操作。歸併排序演算法依賴歸併操作。 歸併操作的過程如下: (1) 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列 (2) 設定兩個指標,最初位置分別為兩個
CCF CSP認證考試歷年真題 數字排序 C語言實現
試題編號:201503-2 試題名稱:數字排序 時間限制:1.0s 記憶體限制:256.0MB 問題描述: 問題描述 給定n個整數,請統計出每個整數出現的次數,按出現次數從多到少的順序輸出。 輸入格式 輸入的第一行包含一個整數n,表示給定數字的個數。第二行包含n個整數,相鄰
氣泡排序(C語言實現)
今天說說氣泡排序演算法。 氣泡排序的思想:就像氣泡一樣讓最小的(或者最大的)浮到最上面,一個個接著浮上來,整個排序完成。 請看圖 這樣一趟排序已完成,此時最小值就會浮到最上面(即水面上)</p><p>這是整個氣泡排序的思想,如果這玩意理解了,那麼程式
CSP考試 2015年03月第2題 數字排序 C語言實現
#include <stdio.h> int main() { int NUM; scanf("%d",&NUM); int a[NUM]; int b[1001]; int i,j; for(i=0;i<NUM;i+
簡單的K-means演算法C語言實現程式碼
K-means演算法是很典型的基於距離的聚類演算法,採用距離作為相似性的評價指標,即認為兩個物件的距離越近,其相似度就越大。該演算法認為簇是由距離靠近的物件組成的,因此把得到緊湊且獨立的簇作為最終目標。 演算法過程如下: 1)從N個樣本隨機選取K個樣本作為質心 2)對剩餘
資料結構之堆排序C語言實現
堆排序: 時間複雜度:O(nlogn) 穩定性:不穩定 實現原理:將待排序的序列構造成一個大頂堆(或小頂堆) 整個序列的最大值就是堆頂的根節點,將它移走 (就是將其與對陣列的末尾元素交換,此時末尾元素就是最大值)。然後將剩餘的n-1個序列重新 構成
基數排序-C語言實現
基數排序(radix sorting)屬於“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)的穩定性排序法。基數排序的方式可以採用最低有效位LSD(Least significant digital)或最高有效位MSD(Mos
吊死鬼遊戲Hangman遊戲的C語言實現程式碼
要顯示單詞,而且要使用者在指定位置輸入字母,故應用到一個函式,可以將游標定位到單詞被挖空的位置等待使用者輸入。我構建了一個gotoxy()函式,是基於網上找到得一個原始碼稍加修改而得到的。呼叫時只需將座標傳遞給gotoxy()即可將游標跳到指定座標。
數值作業:二分法求方程的根之C語言實現程式碼
二分法是求方程近似解的一種簡單直觀的方法,設函式f(x)在[a,b]上連續,且f(a)*f(b)<0,則表明f(x)在[a,b]上至少有一個零點,這是微積分中的介值定理(不得不吐槽一下大學微分方程老師講課跟個煞筆一樣,反正我是重來沒聽的).然後通過二分割槽
perception感知器演算法的C語言實現程式碼
此處僅給出程式碼實現,具體原理及過程請看前面的博文 檔案輸入格式如下: 2 4 0.25 5 0 0 0 0 1 1 1 0 1 1 1 1 0.06230 0.01123 -0.07335 含義如下: 實現程式碼如下:(注:為了通用性,本程式碼只輸出了最後一次迭代結果)
排序算法的C語言實現(上 比較類排序:插入排序、快速排序與歸並排序)
大於等於 額外 通過命令 無序 tro 需要 目錄 線性 如何選擇 總述:排序是指將元素集合按規定的順序排列。通常有兩種排序方法:升序排列和降序排列。例如,如整數集{6,8,9,5}進行升序排列,結果為{5,6,8,9},對其進行降序排列結果為{9,8,6,5}。雖然排序的
(排序演算法)linux c語言實現二分插入排序演算法(簡化版本的插入排序演算法)
二分插入演算法是在已經排序好的序列裡插入一個元素,是穩定的演算法,關鍵詞是折中。 比如說我要在12345678910裡插入一個3,那麼我先看看中間的數比3大,還是比3小,要是比3大,我就去後一半,如果是比3小,我就去前一半,現在進入某個一半後,再做如此操作,最後將其他的元素依次往後挪