zoukankan      html  css  js  c++  java
  • 排序

      1 计数排序
      2 #include<iostream>
      3 #include<assert.h>
      4 using namespace std;
      5 //void countSort(int *a, size_t size)
      6 //{
      7 //        assert(a);
      8 //        int max = a[0]; 
      9 //        int min = a[0];
     10 //        for (size_t i = 1; i < size; i++)
     11 //        {
     12 //            if (a[i] < min)
     13 //            {
     14 //                min = a[i];
     15 //            }
     16 //            else if (a[i] > max)
     17 //            {
     18 //                max = a[i];
     19 //            }
     20 //        }
     21 //        int range = max - min + 1;
     22 //        int *countArray = new int[range];
     23 //        //memset(countArray, 0, sizeof(int)*range);
     24 //        for (size_t i = 0; i < range; i++)
     25 //        {
     26 //            countArray[i]=0;
     27 //        }
     28 //        for (size_t i = 0; i < size; i++)
     29 //        {
     30 //            countArray[a[i] - min]++;
     31 //        }
     32 //        size_t index = 0;
     33 //        for (size_t i = 0; i < range; i++)
     34 //        {
     35 //            while (countArray[i]--> 0)
     36 //            {
     37 //                a[index++] = i + min;
     38 //            }
     39 //        }
     40 //}
     41 void PrintArray(int *a, size_t size)
     42 {
     43     assert(a);
     44     for (size_t i = 0; i<size; i++)
     45     {
     46         cout<<a[i]<<" ";
     47     }
     48     cout << endl;      
     49 }
     50 
     51 基数排序
     52 int GetMaxDigit(int *a, size_t size)
     53 {
     54     int digit = 1;
     55     int max = 10;
     56     for (size_t i = 0; i < size; i++)
     57     {
     58         while (a[i] >= max)
     59         {
     60             ++digit;
     61             max *= 10;
     62         }
     63     }
     64     return digit;
     65 }
     66 void DigitSortLSD(int*a, size_t size)
     67 {
     68     assert(a);
     69     int MaxBit = GetMaxDigit(a, size);
     70     int *bucket = new int[size];
     71     int count[10]; int start[10];
     72     int bit = 1;
     73     int digit = 1;
     74     while (bit<=MaxBit)
     75     {
     76         memset(count, 0, sizeof(int) * 10);
     77         memset(start, 0, sizeof(int) * 10);
     78         for (size_t i = 0; i < size; i++)
     79         {
     80             int num = (a[i] / digit) % 10;
     81             count[num]++;
     82         }
     83         start[0] = 0;
     84         for (size_t i = 1; i < size; i++)
     85         {
     86             start[i] = start[i - 1] + count[i - 1];
     87 
     88         }
     89         for (size_t i = 0; i < size; i++)
     90         {
     91             int num = (a[i] / digit) % 10;
     92             bucket[start[num]++]=a[i];
     93         }
     94         memcpy(a, bucket, sizeof(int) * 10);
     95         digit *= 10;
     96         ++bit;
     97     }
     98 
     99 }
    100 void  main()
    101 {
    102     int  br[] = { 20, 80, 90, 589, 998, 965, 852, 123, 456, 789 };
    103     int len = sizeof(br) / sizeof(int);
    104     cout << "原数据如下:" << endl;
    105     PrintArray(br, len);
    106     cout << "排序后数据如下:" << endl;
    107     //countSort(br, len);
    108     DigitSortLSD(br, len);
    109     PrintArray(br, len);
    110     system("pause");
    111 }
    112     
    113 
    114 
    115 希尔排序
    116 #include<iostream>
    117 #include<assert.h>
    118 using namespace std;
    119 void ShellSort(int *a,size_t size)
    120 {
    121     assert(a);
    122     int gap = size;
    123     while (gap > 1)
    124     {
    125         gap = gap / 3 + 1;
    126         for (int i = gap; i < size; ++i)
    127         {
    128             int index = i;
    129             int tmp = a[index];
    130             int end = index - gap;
    131             while (end>=0&&a[end] > tmp)
    132             {
    133                 a[end + gap] = a[end];
    134                 end -= gap;
    135             }
    136             a[end + gap] = tmp;
    137         }
    138     }
    139 }
    140 void Print(int *a, size_t size)
    141 {
    142     for (size_t i = 0; i < size; ++i)
    143     {
    144         cout << a[i] << " ";
    145     }
    146     cout << endl;
    147 }
    148 void main()
    149 {
    150     int a[10] = { 2,5,4,9,3,6,8,7,1,0 };
    151     Print(a, 10);
    152     ShellSort(a, 10);
    153     Print(a, 10);
    154     system("pause");
    155 }
    156 
    157 归并排序
    158 
    159 #include<iostream>
    160 #include<assert.h>
    161 using namespace std;
    162 
    163 void mergearray(int *a, int first, int mid, int last, int *temp)
    164 {
    165     int i = first, j = mid + 1;
    166     int m = mid, n = last;
    167     int k = 0;
    168     while (i <= m && j <= n)
    169     {
    170         if (a[i] <= a[j])
    171             temp[k++] = a[i++];
    172         else
    173             temp[k++] = a[j++];
    174     }
    175 
    176     while (i <= m)
    177         temp[k++] = a[i++];
    178 
    179     while (j <= n)
    180         temp[k++] = a[j++];
    181 
    182     for (i = 0; i < k; i++)
    183         a[first + i] = temp[i];
    184 }
    185 void mergesort(int *a, int first, int last, int *temp)
    186 {
    187     if (first < last)
    188     {
    189         int mid = (first + last) / 2;
    190         mergesort(a, first, mid, temp);     
    191         mergesort(a, mid + 1, last, temp);  
    192         mergearray(a, first, mid, last, temp);  
    193     }
    194 }
    195 
    196 bool MergeSort(int *a, int n)
    197 {
    198     int *p = new int[n];
    199     if (p == NULL)
    200         return false;
    201     mergesort(a, 0, n - 1, p);
    202     delete[] p;
    203     return true;
    204 }
    205 
    206 void printArray(int *a, int len)
    207 {
    208     for (int i = 0; i<len; i++)
    209         cout << a[i] << " ";
    210     cout << endl;
    211 }
    212 
    213 int main()
    214 {
    215     int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
    216     int len = sizeof(a) / sizeof(int);
    217     printArray(a, len);
    218     MergeSort(a, len);
    219     printArray(a, len);
    220     system("PAUSE");
    221     return 0;
    222 }
    223 
    224 //void mergearray(int *a, int begin1, int end1, int begin2,int end2, int *temp)
    225 //{
    226 //    assert(a);
    227 //    int index = begin1;
    228 //    while (begin1 <= end1&& begin2<= end2)
    229 //    {
    230 //        if (a[begin1] <=a[begin2])
    231 //            temp[index++] = a[begin1++];
    232 //        else
    233 //            temp[index++] = a[begin2++];
    234 //    }
    235 //
    236 //    while (begin1 <= end1)
    237 //    {
    238 //        temp[index++] = a[begin1++];
    239 //    }
    240 //
    241 //    while (begin2 <= end2)
    242 //    {
    243 //        temp[index++] = a[begin2++];
    244 //
    245 //    }
    246 //
    247 //    for (int i = 0; i < index; i++)
    248 //    { 
    249 //        a[begin1 + i] = temp[i];
    250 //    }
    251 //    
    252 //}
    253 //void mergesort(int *a, int first, int last, int *temp)
    254 //{
    255 //    assert(a);
    256 //    if (first < last)
    257 //    {
    258 //        int mid = first +(last-first) / 2;
    259 //        mergesort(a, first, mid, temp);     
    260 //        mergesort(a, mid + 1, last, temp);  
    261 //        mergearray(a, first, mid,mid+1, last, temp);  
    262 //        //memcpy(a + first, temp + first, (last - first - 1)*sizeof(int));
    263 //    }
    264 //}
    265 //bool MergeSort(int *a, int n)
    266 //{
    267 //    int *p = new int[n];
    268 //    if (p == NULL)
    269 //        return false;
    270 //    mergesort(a, 0, n - 1, p);
    271 //    delete[] p;
    272 //    return true;
    273 //}
    274 //void printArray(int *a, int len)
    275 //{
    276 //    for (int i = 0; i<len; i++)
    277 //        cout << a[i] << " ";
    278 //    cout << endl;
    279 //}
    280 //
    281 //int main()
    282 //{
    283 //    int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
    284 //    int len = sizeof(a) / sizeof(int);
    285 //    printArray(a, len);
    286 //    MergeSort(a, len);
    287 //    printArray(a, len);
    288 //    system("PAUSE");
    289 //    return 0;
    290 //}
    291 
    292 插入排序
    293 
    294 #include<assert.h>
    295 #include<iostream>
    296 using namespace std;
    297 void InsertSort(int *a, size_t size)
    298 {
    299     assert(a);
    300     for (int i = 1; i < size; ++i)
    301     {
    302         int index = i;
    303         int tmp = a[index];
    304         int end = index - 1;
    305         while (end >= 0 && a[end]>tmp)
    306         {
    307             a[end + 1] = a[end];
    308             --end;
    309         }
    310         a[end + 1] = tmp;
    311     }
    312 }
    313 void PrintArray(int *a, size_t size)
    314 {
    315     assert(a);
    316     for (int i = 0; i < size; ++i)
    317     {
    318         cout << a[i] << " ";
    319     }
    320     cout << endl;
    321 }
    322 void TestInsertSort()
    323 {
    324     int a[10] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    325     PrintArray(a, 10);
    326     InsertSort(a, 10);
    327     PrintArray(a, 10);
    328 }
    329 
    330 
    331 堆排序
    332 
    333 #include<assert.h>
    334 #include<iostream>
    335 using namespace std;
    336 void AdjustDown(int *a,size_t size,int root)
    337 {
    338     assert(a);
    339     int child = 2 * root + 1;
    340     while (child < size)
    341     {
    342         if (child + 1 < size&&a[child + 1] > a[child])
    343         {
    344             ++child;
    345         }
    346         if (a[child]>a[root])
    347         {
    348             swap(a[child], a[root]);
    349             root = child;
    350             child = 2 * root + 1;
    351         }
    352         else
    353         {
    354             break;
    355         }
    356     }
    357 }
    358 void HeapSort(int *a, size_t size)
    359 {
    360     assert(a);
    361     for (int i = (size-2)/2; i >=0; --i)
    362     {
    363         AdjustDown(a,size,i);
    364     }
    365     for (size_t i = size - 1; i > 0; --i)
    366     {
    367         swap(a[0], a[i]);
    368         AdjustDown(a, i, 0);
    369     }
    370 }
    371 void PrintArray(int *a, size_t size)
    372 {
    373     assert(a);
    374     for (int i = 0; i < size; ++i)
    375     {
    376         cout << a[i] << " ";
    377     }
    378     cout << endl;
    379 }
    380 void TestHeapSort()
    381 {
    382     int a[10] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
    383     PrintArray(a, 10);
    384     HeapSort(a, 10);
    385     PrintArray(a, 10);
    386 }
    387 int main()
    388 {
    389     TestHeapSort();
    390     system("pause");
    391     return 0;
    392 }
  • 相关阅读:
    构建之法第九、十章读后感
    构建之法第七章读后感
    构建之法五、六章读后感
    构建之法第四章读后感
    一组阶段小记之再读构建之法
    打印控件
    TTS语音
    VS2005通过网络连接CE设备进行调试开发
    Windows XP下安装WinCE6.0开发环境
    利用VS2005创建WINCE 6.0 平台
  • 原文地址:https://www.cnblogs.com/yuanshuang/p/5439957.html
Copyright © 2011-2022 走看看