一尘不染

用C对数组排序?

algorithm

这是对以下数组进行排序的最佳排序技术,如果存在重复项,如何处理它们:

int a= {1,3,6,7,1,2};

还有,哪一种是最好的分类技术?

void BubbleSort(int a[], int array_size)
{
    int i, j, temp;
    for (i = 0; i < (array_size - 1); ++i)
    {
        for (j = 0; j < array_size - 1 - i; ++j )
        {
            if (a[j] > a[j+1])
            {
                temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
}

阅读 336

收藏
2020-07-28

共1个答案

一尘不染

在C中,您可以使用内置qsort命令:

int compare( const void* a, const void* b)
{
     int int_a = * ( (int*) a );
     int int_b = * ( (int*) b );

     if ( int_a == int_b ) return 0;
     else if ( int_a < int_b ) return -1;
     else return 1;
}

qsort( a, 6, sizeof(int), compare )

参见:http :
//www.cplusplus.com/reference/clibrary/cstdlib/qsort/


要回答问题的第二部分:最佳(基于比较)排序算法是一种与O(n
log(n))比较一起运行的算法。有几个具有此属性的属性(包括快速排序,合并排序,堆排序等),但是要使用哪个取决于您的用例。

附带一提,如果您对数据有所了解,有时可以比O(n log(n))做得更好-请参阅Radix
Sort
上的Wikipedia文章

2020-07-28