常用排序演算法 C實現

2021-05-28 05:35:42 字數 2443 閱讀 6011

1.1 氣泡排序

[演算法描述]

所給的n個數中,先拿第乙個數來和第二個比較,然後讓較大的乙個排在後面(即如果n1>n2,則讓n1與n2交換位置),然後又拿第二個數來和第三個數比較,又把較大的乙個排在後面,如此往下做下去,直到第n-1個數和第n個數比較完後,最大的那個數就會被公升到了最後面來.接下來又照同樣的方法來把前n-1個數中最大的數排到第n-1的位置上,做到最後,整一列數都被排好了.不過下面的**和上面描述的相反,是從後面開始比較的.

[源程式]

方案一:

for (i=1;i<=n-1;i++)

for(j=n;j>=i+1;j--)

if(a[j-1]>a[j])   //降序:a[j-1]k="a"[j-1];

a[j-1]=a[j];

a[j]=k;

方案二:

for (i=1;i<=n-1;i++)

for(j=i+1;j<=n;j++)

if (a[i]>a[j])  //降序:a[j-1]k="a"[i];

a[i]=a[j];

a[j]=k;

1.2 選擇排序

[演算法描述]

第一趟掃瞄所有資料,選擇其中最小的乙個與第乙個資料互換;第二趟從第二個資料開始向後掃瞄,選擇最小的與第二個資料互換;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程.

[源程式]

for (i=1;i<=n-1;i++)

k="i";

for(j=i+1;j<=n;j++)

if (a[j]a[k]

x="a"[i];

a[i]=a[k];

a[k]=x;

1.3 插入排序

[演算法描述]

假設乙個有序陣列a有n個元素,現在要向a中插入乙個元素x並且使陣列a仍然有序列.

1.從左至右掃瞄陣列a,記錄下第乙個大於(或小於)x的元素的下標,記為k;

2.如果k=0則向陣列末尾插入x

否則:(1)將a[k..n]的所有元素向右移動一位;

(2)a[k]:=x;

(3)n:=n+1.

[源程式]

void insert(struct stack *s, int x)

inti,k;

k="0";

for(i=1;i<=s->top;i++)

if (xdata[i])  //降序:x>s.data[i]

k="i";

break;

if(k==0)

++s->top;

s->data[s->top]=x;

else

for (i=s->top;i>=k;i--) s->data[i+1]=s->data[i];

s->data[k]=x;

++s->top;

1.4 快速排序

[演算法描述]

設有一無序陣列a有n個元素.

1.以陣列a的中點元素為參考值;

2.將中點左邊大於(或小於)參考值的與中點右邊小於(或大於)參考值的元素互換位置;

3.對中點左邊的元素執行快排操作;

4.對中點右邊的元素執行快排操作.

[源程式]

void quicksort(int a, int l, int r)

inti,j,mid,k;

i="l";

j="r";

mid="a"[(int)((l+r)/2)];

dowhile (a[i]mid

while (mida[j]

if (i<=j)

k="a"[i];

a[i]=a[j];

a[j]=k;

++i;

--j;

} while(i<=j);

if(iif(l1.5 雜湊排序

[演算法描述]

首先建立乙個很長的陣列做hash表,表中元素型別為布林型,初始值為false.然後讀入資料,把hash表中下標等於這個數的元素賦值為true.然後:

for (i=1;i<=n;i++)  //從小到大

if(hash[i]) printf("%d ",i);

for (i=n;i>=1;i--)  //從大到小

if(hash[i]) printf("%d ",i);

[源程式]

/* init */

for (i=1;i<=100;i++) hash[i]=0;

/* sort */

for (i=1;i<=10;i++)

scanf("%d",&x);

hash[x]=1;

/* output */

for(i=1;i<=100;i++)   //從小到大

if(hash[i]) printf("%d ",i);

for(i=100;i>=1;i--)   //從大到小

if(hash[i]) printf("%d ",i);

C 實現常用排序演算法

原理 利用快速排序對乙個集合進行排序,任取集合的乙個元素,以這個元素為比較,所有比這個值大的放在右邊,小的值放在左邊,然後分別對左右區間進行遞迴排序。快速排序 public int sortunit listlist int low,int hign where t icomparable list...

C 常用排序演算法的實現

最常用的演算法莫過於氣泡排序 選擇排序 插入排序 快速排序 歸併排序和希爾排序這幾種了。標頭檔案如下 ifndef sorting h define sorting h const static int sg count 10 void bubblesort int pdata,int count ...

常用排序演算法實現 C語言

排序演算法原理都不難,實現起來卻沒那麼簡單,特別是一些邊界問題的處理。前些天把這些常有的排序演算法實現了一遍,寫的也不太好,很多i,j,k之類的變數,也很多迴圈巢狀,不過初步測試是正確的。1 include stdio.h 23 void swap int a,int b 交換兩個整數 4void ...