排序算法

学C的时候排序的算法只知道是冒泡排序和选择排序,效率为n^2,当数据量比较大的时候,用这种算法排序跑起来付出的代价是很可观的。

当然还有很多高效率的排序方法,如快速排序,堆排序,效率为n*logn。下面就列出快速排序的核心代码:

•void QuickSort(int * arr,int left,int right)
•{
•     int i,j,k,mid,temp;
•     i = left;
•     j = right;
•     srand((int)time(0));
•     mid = arr[left + rand()%(right - left)];
•     do
•     {
•         while (arr[i]<mid && i<right) ++i;
•         while (arr[j]>mid && left<j) --j;
•         if (i<=j)
•         {
•             ++total;temp = arr[i];arr[i] = arr[j];arr[j] = temp;++i;--j;
•         }
•     }while (i<=j);
•     if (i<right) QuickSort(arr,i,right);
•     if (left<j) QuickSort(arr,left,j);
•}

其实最快好像是标准库里的sort()函数,只要包头文件#include <algorithm>就能直接调用。

那照这样说冒泡排序和选择排序效率那么低,应该淘汰它啦。不过在很多时候我们还是用这两种方法较多。一个是一般我们设计的程序数据不多,二来通俗易懂代码精简。还有单片机很多都是采取冒泡排序的,毕竟经过这么多年大家还是使用它,肯定是有它的个人之处。

你可能感兴趣的:(Algorithm,c,算法)