编程算法 - 高速排序算法 代码(C)

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程算法 - 高速排序算法 代码(C)相关的知识,希望对你有一定的参考价值。

高速排序算法 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


经典的高速排序算法, 作为一个编程者, 不论什么时候都要完整的手写.


代码:

/*
 * main.cpp
 *
 *  Created on: 2014.6.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <stdio.h>
#include <stdlib.h>

int RandomInRange(int min, int max)
{
    int random = rand() % (max - min + 1) + min;
    return random;
}

void Swap(int* num1, int* num2)
{
    int temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

int Partition(int data[], int length, int start, int end)
{
    if(data == NULL || length <= 0 || start < 0 || end >= length) {
    	return -1;
    }

    int index = RandomInRange(start, end);
    Swap(&data[index], &data[end]);

    int small = start - 1;
    for(index = start; index < end; ++ index)
    {
        if(data[index] < data[end])
        {
            ++ small;
            if(small != index)
                Swap(&data[index], &data[small]);
        }
    }

    ++ small;
    Swap(&data[small], &data[end]);

    return small;
}

void QuickSort (int data[], int length, int start, int end) {
	if (start == end) return;

	int index = Partition(data, length, start, end);
	if (index > start)
		QuickSort(data, length, start, index-1);
	if (index < end)
		QuickSort(data, length, index+1, end);
}

int main(void)
{
    int str[] =  {49, 38, 65, 97, 76, 13, 27, 49};
    QuickSort(str, 8, 0, 7);
    for (int i : str) {
    	printf("%d ", i);
    }
    printf("\n");

    return 0;
}

输出:

13 27 38 49 49 65 76 97 




技术分享














以上是关于编程算法 - 高速排序算法 代码(C)的主要内容,如果未能解决你的问题,请参考以下文章

编程算法 - 数组中出现次数超过一半的数字 代码(C)

杂文 - [1.1]使用库语言排序算法

高速排序算法C++实现

算法:高速排序

编程算法 - 数组中的逆序对 代码(C)

编程算法 - 和为s的两个数字 代码(C)