归并排序算法
C语言实现简单的归并排序算法:
归并排序算法是运用分而治之方法来解决排序问题。
分而治之方法通经常使用下面步骤来进行排序算法:
1.若n为1,算法终止。
2.否则。将这一元素集合切割成两个或很多其它个子集合,对每个子集合分别排序,然后将排好序的子集合归并为一个集合。
我这里是将集合切割成两个子集合。
实例排序图:
核心代码:
void Merge(int arr[], int left, int mid, int right)//将两个子集升序合并 { int i = left; int j = mid + 1; int k = 0; while( i <= mid && j <= right) { if(arr[i] > arr[j]) { temp[k++] = arr[j++]; } else { temp[k++] = arr[i++]; } } while(i <= mid) { temp[k++] = arr[i++]; } while(j <= right) { temp[k++] = arr[j++]; } for( i = 0; i < k; i++) { arr[i + left] = temp[i]; } }
void MergeSort(int arr[], int left, int right)//将集合拆分成两个子集 { int mid; if(left < right) { mid = (left + right) >> 1; MergeSort(arr, left, mid); MergeSort(arr, mid+1, right); Merge(arr, left, mid, right); } }
測试例如以下: