关于七大排序问题《二》

xiaoxiao2021-02-28  145

5冒泡排序:

冒泡排序的思想是(按照升序):如果前一个数大于后一个数,那么就交换,如图所示:

冒泡排序实现的实现:

void BublesSort(int* a, size_t n) { assert(a); int end = n; while (end > 0) { bool exchange = false;//如果这已经是个有序的数列 for (int i = 1; i < n; ++i) { if (a[i - 1]>a[i]); { swap(a[i - 1], a[i]); } } if (exchange = false) { break; } end--; } }6,归并排序:

它的排序思想需要创建一个临时的数组如图所示:

归并排序的实现:

void Merge(int* a, int* tmp, int begin1, int end1, int begin2, int end2) { size_t pos = begin1; size_t index = 0; while (begin1 <= end1&&begin2 <= end2) { if (a[begin1] < a[begin2]) { tmp[index++] = a[begin1++]; } else { tmp[index++] = a[begin2++]; } while (begin1 < end1) { tmp[index++] = a[begin1++]; } while (begin2 < end2) { tmp[index++] = a[begin2++]; } } memcpy(a, tmp, sizeof(int)*(end2 - pos + 1)); } void _MergeSort(int* a, int* tmp, int left, int right) { int mid = left + (right - left) / 2; _MergeSort(a, tmp, left, mid); _MergeSort(a, tmp, mid + 1, right); Merge(a, tmp, left, mid, mid + 1, right);//归并 } void MergeSort(int* a, size_t n) { assert(a); int* tmp = new int[n]; _MergeSort(a, a,0, n - 1); delete[] tmp; }不难看出归并算法的渐进时间成本取决于其中循环迭代的总次数。

转载请注明原文地址: https://www.6miu.com/read-20085.html

最新回复(0)