排序

  1. //选择排序  
  2. void SelectSort(int *array, int size)  
  3. {  
  4.     for (int idx = 0; idx < size; ++idx)  
  5.     {  
  6.         int min = idx ;//假定第一个元素最小  
  7.         int tmp = idx + 1;//标记第二个元素  
  8.         while (tmp < size)//寻找最小的元素  
  9.         {  
  10.             if (array[tmp] < array[min])  
  11.             {  
  12.                 min = tmp;  
  13.             }  
  14.             tmp++;  
  15.         }  
  16.         if (idx != min)  
  17.         {  
  18.             std::swap(array[min], array[idx]);  
  19.         }  
  20.     }  
  21. }  
  22.   
  23. //冒泡排序  
  24. void BubbleSort(int* array, int size)  
  25. {  
  26.     int flag = 1;  
  27.     int  count = 0;  
  28.     for (int idx = 0; idx < size - 1; ++idx)//控制数据向后遍历  
  29.     {  
  30.         for (int jx = 0; jx < size - idx - 1; ++jx)//两个数进行比较  
  31.         {  
  32.             if (array[jx]>array[jx + 1])  
  33.             {  
  34.                 std::swap(array[jx], array[jx + 1]);  
  35.                 flag = 0;  
  36.             }  
  37.             count++;//标记比较次数  
  38.         }  
  39.         if (flag == 1)//有序的不进行比较  
  40.         {  
  41.             break;  
  42.         }  
  43.     }  
  44. }  
  45.   
  46. //递归归并排序  
  47. void Merge(int *array, int *temp,int left, int mid, int right)//归并  
  48. {  
  49.     int begin1 = left;//标记最左边的节点  
  50.     int end1 = mid;//标记中间的节点  
  51.     int begin2 = mid+1;//   
  52.     int end2 = right;  
  53.     int index = left;  
  54.     while (begin1 <= end1 && begin2 <= end2)  
  55.     {  
  56.         if (array[begin1] < array[begin2])  
  57.         {  
  58.             temp[index++] = array[begin1++];  
  59.         }  
  60.         else  
  61.         {  
  62.             temp[index++] = array[begin2++];  
  63.         }  
  64.     }  
  65.     while (begin1 <= end1)  
  66.     {  
  67.         temp[index++] = array[begin1++];  
  68.     }  
  69.     while (begin2 <= end2)  
  70.     {  
  71.         temp[index++] = array[begin2++];  
  72.     }  
  73. }  
  74. void _MergeSort(int *array,int *temp, int left, int right)  
  75. {  
  76.     if (left < right)  
  77.     {  
  78.         int mid = left + ((right - left) >> 1);  
  79.         _MergeSort(array, temp, left, mid);  
  80.         _MergeSort(array,temp, mid + 1, right);  
  81.         Merge(array, temp,left, mid, right);  
  82.         memcpy(array + left, temp + left, sizeof(array[0])*(right - left + 1));  
  83.     }  
  84. }  
  85. void MergeSort(int *array, int size)  
  86. {  
  87.     int *temp = new int [size];  
  88.     if (NULL != temp)  
  89.     {  
  90.         _MergeSort(array, temp, 0, size - 1);  
  91.         delete[]temp;  
  92.     }  
  93. }  
  94.   
  95. //非递归归并排序  
  96. void MergeSortNor(int *array, int size)  
  97. {  
  98.     int* temp = new int[size];  
  99.     int left = 0;  
  100.     int right = size - 1;  
  101.     int gap = 1;  
  102.     while (gap < size)  
  103.     {  
  104.         for (size_t idx = 0; idx < size; idx += 2 * gap)  
  105.         {  
  106.             left = idx;  
  107.             int mid = idx + gap - 1;  
  108.             right = mid + gap;  
  109.             if (mid >= size)  
  110.             {  
  111.                 mid  = size - 1;  
  112.             }  
  113.             if (right >= size)  
  114.             {  
  115.                 right = size - 1;  
  116.             }  
  117.             Merge(array, temp, left, mid, right);//归并  
  118.         }  
  119.         memcpy(array, temp, size*sizeof(int));  
  120.         gap++;  
  121.     }  
  122.     delete[]temp;  
  123. }  
  124.   
  125. //打印排序后的序列  
  126. void printfSort(int arr[], int count)  
  127. {  
  128.     for (int idx = 0; idx < count; ++idx)  
  129.     {  
  130.         cout << arr[idx] << " ";  
  131.     }  
  132.     cout << endl;  
  133. }  
  134. void FuntTest()  
  135. {  
  136.     //int array[] = { 1 };  
  137.     int array[] = { 21, 25, 49, 25, 0, 16 };  
  138.     //int array[] = { 7, 3, 2, 0, 1, 4 };  
  139.     //int array[] = { 2, 3, 5, 7, 9, 0, 1, 6, 4, 8 };  
  140.     int count = sizeof(array) / sizeof(array[0]);  
  141.     cout << count << endl;  
  142.     printfSort(array, count);  
  143.     //BubbleSort(array, count);//ok  
  144.     //SelectSort(array, count);//ok  
  145.     //InsertSort(array, count);  
  146.     //MergeSort(array, count);//递归归并排序  
  147.     //MergeSortNor(array, count);非递归归并排序  
  148.     printfSort(array,count);  
  149. }  
  150. int main()  
  151. {  
  152.     FuntTest();  
  153.     system("pause");  
  154.     return 0;  
原文地址:https://www.cnblogs.com/lyugeyi1030/p/8228137.html