• 排序算法--快速排序


    1.简介

    分治和递归

    三数中值分割

    最坏时间为O(N2)

    最好时O(NlogN)

    平均情况O(NlogN)

    2.实现

    /*快速排序*/
    ElementType Median3(ElementType A[], int Left, int Right)
    {
    	/*A[left] <= A[Center] <= A[Right]*/
    	int Center = (Left + Right) / 2;
    	if (A[Left] > A[Center])
    	{
    		Swap(&A[Left], &A[Center]);
    	}
    	if (A[Left] > A[Right])
    	{
    		Swap(&A[Left], &A[Right]);
    	}
    	if (A[Center] > A[Right])
    	{
    		Swap(&A[Center], &A[Right]);
    	}
    
    	/* 将枢纽元移到Right-1处 */
    	Swap(&A[Center], &A[Right - 1]);
    	return A[Right - 1];
    }
    
    #define Cutoff (3)
    void Qsort(ElementType A[], int Left, int Right)
    {
    	int i, j;
    	ElementType Privot;
    
    	if (Left + Cutoff <= Right)
    	{
    		Privot = Median3(A, Left, Right);
    		i = Left; j = Right - 1;
    		for (;;)
    		{
    			while (A[++i] < Privot){}
    			while (A[--j] > Privot){}
    			if (i < j)
    			{
    				Swap(&A[i], &A[j]);
    			}
    			else
    				break;
    		}
    
    		Swap(&A[i], &A[Right - 1]);
    		Qsort(A, Left, i - 1);
    		Qsort(A, i + 1, Right);
    	}
    	else
    		/*Do an insertion sort on the small array*/
    		InsertionSort(A + Left, Right - Left + 1);
    }
    
    void Quicksort(ElementType A[], int N)
    {
    	Qsort(A, 0, N - 1);
    }
    

      

  • 相关阅读:
    第二周作业
    查找整数
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    第四周作业
    第三周作业
    第二周作业
    7-2求最大值及其下标
  • 原文地址:https://www.cnblogs.com/my-cat/p/5981543.html
Copyright © 2020-2023  润新知