这是对以下数组进行排序的最佳排序技术,如果存在重复项,如何处理它们:
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; } } } }
在C中,您可以使用内置qsort命令:
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文章