您的位置:首页 > 其它

各种排序算法比较

2011-11-30 11:31 260 查看
稳定:冒泡排序、插入排序、归并排序和基数排序不稳定:选择排序、快速排序、希尔排序、堆排序插入排序:一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:  1. 从第一个元素开始,该元素可以认为已经被排序  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描(可用二分查找,二分查找适用于已排序的数列)  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置  5. 将新元素插入到下一位置中  6. 重复步骤2
希尔排序:
冒泡排序:第一趟,从最后的n-1个数开始,与前面一个数两两比较,直到把最小一个数放到第一位。第二趟,也是从最后的n-1个数开始,与前面一个数两两比较,直到把最小一个数放到第二位。以此类推。
快速排序:将第一个数A1作为分割点,小于A1的放到A1前面,大于A1的放到A1后面,这样就有两个集合A,B,然后分别把A,B的第一个数分别作为各自的分割点,继续分割出4个集合,以此类推,继续分出8个集合,直至每个集合中只剩一个元素。可以想象成这个过程是一个树,所以要用递归。
选择排序:第一趟,选择第一个数作为标准,逐一比较后面的数,比它小的与之替换;第二趟,选择第二个数作为标准,逐一比较后面的数,比它小的与之替换,以此类推,每趟都会得出最后的数,这个算法适合从大量数据中中选择一部分排序记录。
堆排序:
归并排序:
基数排序:
二分查找:int binary_search(int* a, int len, int goal)
{
int low = 0;
int high = len - 1;
while(low <= high)
{
int middle = (low + high)/2;
if(a[middle] == goal)
return middle;
//在左半边
else if(a[middle] > goal)
high = middle - 1;
//在右半边
else
low = middle + 1;
}
//没找到
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: