快速排序和堆排序

来源:互联网 发布:淘宝淘红底白字 编辑:程序博客网 时间:2024/05/28 05:16

1.快速排序

        快速排序是不稳定的排序算法,平均时间复杂度O(nlgn)。快速排序是利用了partition( )进行排序的。partition( )有两种实现形式,(1)利用两个指针一个头指针,一个尾指针,通过交换头尾指针所指的数进行排序2)一前一后两个指针同时从左往右进行遍历,如果前指针所遇到的数比主元小,则后指针右移一位,然后交换。Partition方法还可以用在很多地方,注意举一反三。

//quicksort 不稳定排序void quicksort (int array[],int left,int right){if (left < right){int i = left, j = right;int x = array[left];while (i < j){while (i < j && array[j] >= x)j--;if (i < j)array[i++] = array[j];while (i < j && array[i] <= x)i++;if (i < j)array[j--] = array[i];}array[i] = x;quicksort (array,left,j-1);quicksort (array,j+1,right);}}

2.堆排序

堆排序是不稳定的排序算法,平均时间复杂度O(nlgn)

//堆排序void heap_build (int array[],int i,int len){int left = 2*i;int right = 2*i+1;int max = i;if (left < len && array[left] > array[max])max = left ;if (right < len && array[right] > array[max])max = right;if (max!=i){swap(array[max],array[i]);heap_build (array,max,len);}}void heap_sort(int array[],int n){int i;for (i=n/2;i>=0;i--){heap_build(array,i,n);}for (i=n-1;i>=1;i--){swap(array[0],array[i]);n=n-1;heap_build(array,0,n);}}

稳定的排序算法:直接插入排序,冒泡排序,归并排序,基数排序。



1 0
原创粉丝点击