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

2021-06-07 21:11:05 字數 3163 閱讀 3320

重溫資料結構,順手寫下幾種常用的排序演算法,以備查詢。

[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.針對所有的元素重複以上的步驟,除...