直接插入排序 希爾排序 快速排序 堆排序演算法比較

2021-09-25 07:10:30 字數 2292 閱讀 7298

進行典型內部排序演算法的比較,隨機產生整數樣本,進行四種排序,並比較各種排序演算法的執行時間。

#include "stdio.h"

#include "stdlib.h" 

#include "conio.h"

#include "time.h"

#define maxsize 20

typedef structredtype;

typedef structsqlist;

void initsqlist(sqlist *l)//initsqlist

void createsqlist(sqlist *l)

printf("\n\n未排序的資料為:\n");

for( i=1; i<=l->length; i++)

printf("%8d",l->r[i]);

}//createsqlist

/*************************************直接插入排序********************************************/ 

void insertsort(sqlist *l)

for(i=2; i<=l->length; i++)

if(l->r[i].key < l->r[i-1].key)//for

l->r[j+1].key = l->r[0].key;//元素插入 

}//if

}//insertsort

/*************************************希爾排序********************************************/ 

void shellsort(sqlist *l,int dk)//if

} //shellsort

void shellinsert(sqlist *l)                    //當dk變為1是就是最基本的直接插入排序 

}//shellsqlist

/*************************************快速排序********************************************/ 

int partition(sqlist *l, int low, int high)//while

//當low=high時跳出迴圈 

l->r[low].key = l->r[0].key; 

return low;

}//partition

void  qsort(sqlist *l, int low, int high)

l->r[s].key = rc; 

}//heapadjust

void heapsort(sqlist *l)

}//heapsort

/*************************************輸出函式********************************************/ 

void outputsqlist(sqlist *l)

printf("\n");

}//outputsqlist

/*************************************複製鍊錶函式********************************************/ 

void copysqlist(sqlist *l, sqlist *l_copy)

else

}//copysqlist

int main()

outputsqlist(&l_copy);

//printf("\n排序花的時間 : %lf seconds\n",double(finish-start));

}return 0;

}

最後對,這些排序演算法的複雜度進行一下簡單的比較

演算法種類

時間複雜度

空間複雜度

是否穩定

最好情況

平均情況

最壞情況

直接插入排序

o(n)

o(n²)

o(n²)

o(1)

是希爾排序

o(1)

否快速排序

o(nlog₂n)

o(nlog₂n)

o(n²)

o(log₂n)

否堆排序

o(nlog₂n)

o(nlog₂n)

o(nlog₂n)

o(1)

直接插入排序 希爾排序

一.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。最優複雜度 當輸入陣列就是排好序的時候,複雜度為o n 而快速排序在這種情況下會產生o n 2 的複雜度。最差複雜度 當輸入陣列為倒序時,複雜度...

直接插入排序 希爾排序

1.直接插入排序 時間複雜度o n2 工作原理 通過構建有序序列,對於未排序資料,在已排序的序列中,從後向前掃瞄,找到相應的位置並插入。插入排序在實現上,在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後移動,為最新元素提供插入空間。直接插入排序 public static void insert...

插入排序(直接插入排序 希爾排序)

直接插入排序 基本思想 假設待排序的數存放在陣列arr 1.n 中。初始時,arr 1 自成1個有序區,無序區為arr 2.n 從i 2起直至i n為止,依次將arr i 插入當前的有序區arr 1.i 1 中,生成含n個記錄的有序區。演算法複雜度 對於具有n個記錄的檔案,要進行n 1次排序 各種狀...