您的位置:首页 > 其它

各种排序算法的比较次数

2015-08-08 21:16 267 查看
借助比较的排序每次比较贡献O(1)的复杂度

插入排序
最少n-1 最多n(n-1)/2

冒泡排序
最少n-1 最多n(n-1)/2

选择排序
n(n-1)/2

快速排序

int partition(int *arr , int low , int high)

{

int pivo = arr[low];

while(low < high)

{

while(low < high && arr[high] >= pivo)

--high;

arr[low] = arr[high];

while(low < high && arr[low] <= pivo)

++low;

arr[high] = arr[low];

}

arr[low] = pivo;

return low;

}

// 快速排序 递归

void qsort(int *arr , int low , int high)

{

if(low < high)

{

int pivo = partition(arr , low , high);

qsort(arr , low , pivo-1);

qsort(arr , pivo+1 , high);

}

}

分析:在递归部分由于递归深度可为logn -- n,故递归部分的比较次数为logn -- n,partition部分的比较次数与数据分布有关,大约为n次,还需进一步分析。。。

总共比较次数nlogn -- n^2

希尔排序
??

归并排序
在每一次二路归并的过程中,对于N个元素:当一个数组的最小元素比另一数组的最大元素还大时;若两个数组元素交替增长,比较次数最多,为2N-1

再加上递归深度logN,故比较次数为 NlogN -- (2N-1)logN

堆排序
??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: