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; }不难看出归并算法的渐进时间成本取决于其中循环迭代的总次数。