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 ...