回 帖 发 新 帖 刷新版面

主题:分享个排序算法...........

#include<stdio.h>
#include<stdlib.h>
#define n 18
void main()
{
    bool bIEvennumber=false;//元素个数是否偶数
    int A[n]={3,1,5,4,7,9,8,6,10,2,12,11,14,13,16,15,18,17};
    int max,min,i,j,d,c;
    printf("原数组为:      ");

    for(i=0;i<n;i++)
    printf("%d ",A[i]);
    printf("\n");
    
    if(n%2==0)
        bIEvennumber=true;
    for(i=0;i<n/2;i++)  //
    {
        
        max=min=A[i];
        c=d=i;
      for(j=i+1;j<n-i;j++)
      {
         
        if(A[j]>=max)
        {
            max=A[j];
            c=j;
            
        }
        else if(A[j]<=min)
        {
            min=A[j];    
            d=j;
        }
      }
       if(j-i<=2)
           break;
       //较小值放前面
       A[d]=A[i];
       A[i]=min;
       //较大值放后面
       if(c!=i)
       {
         A[c]=A[j-1];
         A[j-1]=max;
       }
       else
       {
         max=A[j-1]; 
                     //此处max被用做中间变量不用担心影响到它本来的作用
         A[j-1]=A[d];
         A[d]=max;
       }
       
              
    }


    if(bIEvennumber&&A[i]>A[i+1])
    {
        int temp;
        temp=A[i+1];
        A[i+1]=A[i];
        A[i]=temp;
    }

    printf("调整后的数组为:");
    for(i=0;i<n;i++)
        printf("%d ",A[i]);
      printf("\n ");
    return;
}

回复列表 (共22个回复)

21 楼

我想问个简单的问题,时间和空间复杂度怎么算啊,我看了好多书,都说是一个关于N的函数,我就是不知道那函数怎么求啊,楼主能不能帮哈小弟啊,谢了啊

22 楼

时间复杂度又称为计算复杂度,它是一个算法运行时间的相对量度,它大致等于计算机执行一种简单操作(比如赋值,比较等)所需的时间与算法中进行简单操作次数的乘积。但是一个算法的时间复杂度的计算是相当繁琐的,特别对于较复杂的算法更是如此,实际上,我们没必要精确的计算出算法的时间复杂度,只要大致算出相应的数量级即可。比如有一个算法,把它每执行一条简单语句的执行次数加起来是:n^3 + n^2+1,那么该算法时间复杂度就相当于n^3数量级,也就是说它的时间复杂度是n^3记为O(n^3)至于空间复杂度是指算法占用计算机资源的多少,具体我就不一一说了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册