重溫資料結構,順手寫下幾種常用的排序演算法,以備查詢。
[cpp]view plain
copy
print?
#include
#include
#include
#include
#include
#include
void print(int a, int n)
printf("/n");
return;
} //直接插入排序,時間複雜度o(n^2),空間複雜度o(1),穩定排序
//a[0]不參與排序,實際排序空間為a[1]~a[n]
void insertsort(int a, int n)
a[j+1] = a[0];
} }
printf("insertsort : ");
print(a, n);
return;
} //一次shell排序過程
void shellpass(int a, int n, int increment)
a[j+increment] = a[0];
} }
return;
} //shell排序,時間複雜度依賴於增量序列,應避免互為倍數的增量序列,
//目前較好時間複雜度為n^1.25~1.6n^1.25,空間複雜度為o(1),不穩定排序
void shellsort(int a, int n)
while(increment>1);
printf("shellsort : ");
print(a, n);
return;
} //氣泡排序,時間複雜度o(n^2),空間複雜度o(1),穩定排序
void bubblesort(int a, int n)
} i = lastexchangepos;
} printf("bubblesort : ");
print(a, n);
return;
} 快速排序,平均時間複雜度為o(nlgn),空間複雜度為o(lgn)~o(n),快速排序不穩定。
//c++中快速排序的實現,
void quicksort(int a, int low, int high)
} if(j>low)
quicksort(a, low, j);
if(iquicksort(a, i, high);
return;
} //快速排序的一次劃分
int partition(int a, int low, int high)
a[low] = a[0];
return low;
} //資料結構中標準的快速排序演算法
void qsort(int a, int low, int high)
return;
} //直接選擇排序,時間複雜度為o(n^2),空間複雜度為o(1),不穩定排序
void selectsort(int a, int n)
if(min!=i)
} printf("selectsort : ");
print(a, n);
return;
} //調整堆
void heapify(int a, int s, int to)
*///heapify方法的遞推演算法
a[0] = a[s];
for(int j=2*s; j<=to; j*=2)
a[s] = a[0];
return;
} //堆排序,最壞時間複雜度nlgn,空間複雜度為o(1),不穩定排序,適合大量資料的排序
void heapsort(int a, int n)
printf("heapsort : ");
print(a, n);
return;
} //歸併排序的一次合併過程
void mergepass(int a, int low, int mid, int high)
//歸併排序,時間複雜度o(nlgn),空間複雜度o(n),穩定排序
void mergesort(int a, int low, int high)
return;
} int main()
; int n = sizeof(source)/sizeof(source[0])-1;
int a[sizeof(source)/sizeof(source[0])];
memcpy(a, source, sizeof(source));
insertsort(a, n);
memcpy(a, source, sizeof(source));
shellsort(a, n);
memcpy(a, source, sizeof(source));
bubblesort(a, n);
memcpy(a, source, sizeof(source));
quicksort(a, 1, n);
printf("quicksort : ");
print(a, n);
memcpy(a, source, sizeof(source));
qsort(a, 1, n);
printf("qsort : ");
print(a, n);
memcpy(a, source, sizeof(source));
selectsort(a, n);
memcpy(a, source, sizeof(source));
heapsort(a, n);
memcpy(a, source, sizeof(source));
mergesort(a, 1, n);
printf("mergesort : ");
print(a, n);
system("pause");
return 0;
}
幾種C語言實現的排序演算法
首先定義要進行排序的陣列 define maxsize 10 include typedef struct list 列印陣列函式void print list l 交換函式void swap list l,int i,int j 選擇排序 選擇排序 void selectsort list l i...
C語言實現幾種常見排序演算法
worker.c created on 2010 7 1 author panfei include void swap int x,int y 插入排序 公升序 void insertsort int arr,int size arr j 1 to insert 選擇排序 降序 void sele...
C語言實現幾種常見排序演算法
氣泡排序最好的時間複雜度為 o n 氣泡排序總的平均時間複雜度為 o n 2 氣泡排序演算法的原理如下 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。3.針對所有的元素重複以上的步驟,除...