排序算法

来源:互联网 发布:网络套现违法吗 编辑:程序博客网 时间:2024/06/04 19:27

(1)优化版冒泡排序

char* strSort(char *c)
{
        assert(NULL != c);
        char *temp = c;
        int len = strlen(c)-1;
        while (len--)
        {
           c = temp;
           bool bSwap = false;
           while (*(c + 1))
          {
                if (*c > *(c + 1))
                {
                    bSwap = true;
                   *c       = *c + *(c + 1);
                   *(c + 1)  = *c - *(c + 1);
                   *c       = *c - *(c + 1);
                }
                ++c;
        }
        if (!bSwap)
        {
            break;
        }
      }
     return temp;
}

归并算法:

//将有二个有序数列a[first...mid]和a[mid...last]合并。   

  1. void mergearray(int a[], int first, int mid, int last, int temp[])  
  2. {  
  3.     int i = first, j = mid + 1;  
  4.     int m = mid,   n = last;  
  5.     int k = 0;  
  6.       
  7.     while (i <= m && j <= n)  
  8.     {  
  9.         if (a[i] <= a[j])  
  10.             temp[k++] = a[i++];  
  11.         else  
  12.             temp[k++] = a[j++];  
  13.     }  
  14.       
  15.     while (i <= m)  
  16.         temp[k++] = a[i++];  
  17.       
  18.     while (j <= n)  
  19.         temp[k++] = a[j++];  
  20.       
  21.     for (i = 0; i < k; i++)  
  22.         a[first + i] = temp[i];  
  23. }  
  24. void mergesort(int a[], int first, int last, int temp[])  
  25. {  
  26.     if (first < last)  
  27.     {  
  28.         int mid = (first + last) / 2;  
  29.         mergesort(a, first, mid, temp);    //左边有序  
  30.         mergesort(a, mid + 1, last, temp); //右边有序  
  31.         mergearray(a, first, mid, last, temp); //再将二个有序数列合并  
  32.     }  
  33. }  
  34.   

 

原创粉丝点击