快速排序

原创 2012年03月30日 23:26:18
#include <stdio.h>
#include <stdlib.h>
int partition(int*, int, int);
void qSort(int*, int, int);
void swap(int*, int*);
int main(void)
{
    int i;
    int array[] = {11, 5, 20, 5, 100, 88, -987, 666, 0, 11, 11};
    for (i = 0; i < 11; ++i)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
    qSort(array, 0, 10);
    for (i = 0; i < 11; ++i)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
    return 0;
}
/*
int partition(int *array, int low, int high)
{
    int i = low + 1;
    int j = high;
    int pivot = array[low];
    while (i <= j)
    {
        if (array[i] <= pivot)
        {
            ++i;
        }
        else if (array[j] > pivot)
        {
            --j;
        }
        else
        {
            swap(&array[i], &array[j]);
        }
    }
    array[low] = array[j];
    array[j] = pivot;
    return j;
}

*/
int partition(int *array, int low, int high)
{
	int i = low;
	int j = high + 1;
	int pivot = array[low];
	while (i < j)
	{
	    while (array[++i] <= pivot);
	    while (array[--j] > pivot);
	    if (i >= j) break;
	    swap(&array[i], &array[j]);
	}
	array[low] = array[j];
	array[j] = pivot;
	return j;
}
void qSort(int *array, int low, int high)
{
    int q;
    if (low < high)
    {
        q = partition(array, low, high);
        qSort(array, low, q - 1);
        qSort(array, q + 1, high);
    }
}
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

快速排序代码

简单的快速排序

  • 2015-01-23 09:57
  • 479B
  • 下载

算法导论二:快速排序

快速排序采用的是分治策略,其方法是将一个数组a[p,r]划分为两个子数组a[p,q-1],a[q+1,r],使其左子数组元素中的元素均小于等于a[q],右子数组元素均大于a[q],并递归划分两个子数组...

快速排序算法

C#快速排序练习

  • 2017-06-20 11:40
  • 30KB
  • 下载

快速排序

上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1...

快速排序原创数据(20组)

  • 2015-10-30 21:48
  • 7.57MB
  • 下载

第一篇博客——快速排序

快速排序
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)