#include "stdafx.h"#include //打印数组的代码void print(int* pData, int count) { for (int i = 0; i< count; i++) { std::cout << pData[i] << " "; } std::cout << std::endl;}// 冒泡法排序:每一次遍历将最大的一个数沉底!// 相同元素的前后顺序不会发生变化,冒泡法是一种稳定的排序算法。// 时间复杂度是 O(n^2)void BubbleSort(int* pData, int n){ for(int i=0 ; ikey) { a[i + 1] = a[i]; i--; } a[i + 1] = key; }}//快速排序算法//1. 快速排序//排序过程:快速排序应该是应用最广泛的排序算法,它是采用了分治的思想(这种思想很重要)。其基本的思想就是任取待排序序列中的某个元素(元素的选取方式在一定程序上会影响实现过程和排序效率)作为标杆,将待排序序列划分为左右两个子序列,左侧元素小于标杆元素,右侧元素大于标杆元素,标杆元素则排在这两个子序列的中间,然后再对这两个子序列重复上述的方法,直至排序结束。// 分析总结:快速排序的时间复杂度为O(nlogn),是一种不稳定的排序算法。void QuickSort(int *a, int left, int right){ if (left < right) { int i = left - 1, j = right + 1; int mid = a[(left + right) / 2]; while (true) { while (a[++i] < mid); while (a[--j] > mid); if (i >= j) { break; } int temp = a[i]; a[i] = a[j]; a[j] = temp; } QuickSort(a, left, i - 1); QuickSort(a, j + 1, right); }}//2. 归并排序//排序过程:归并排序的原理比较简单,也是基于分治思想的。它将待排序的元素序列分成两个长度相等的子序列,然后为每一个子序列排序,然后再将它们合并成一个序列。//分析总结:归并排序最好、最差和平均时间复杂度都是O(nlogn),是一种稳定的排序算法。//归并排序 //合并两个已排好序的子链 //分析总结:归并排序最好、最差和平均时间复杂度都是O(nlogn),是一种稳定的排序算法。void Merge(int *array, int left, int mid, int right){ int* temp = new int[right - left + 1]; int i = left, j = mid + 1, m = 0; while (i <= mid && j <= right) { if (array[i] < array[j]) { temp[m++] = array[i++]; } else { temp[m++] = array[j++]; } } while (i <= mid) { temp[m++] = array[i++]; } while (j <= right) { temp[m++] = array[j++]; } for (int n = left, m = 0; n <= right; n++, m++) { array[n] = temp[m]; } delete temp;}void MergeSort(int *a, int left, int right){ if (left < right) { int mid = (left + right) / 2; MergeSort(a, left, mid); MergeSort(a, mid + 1, right); Merge(a, left, mid, right); }}int main(){ 冒泡法实验 //int a[10] = { 3,7,2,4,5,8,9,0,6,1 }; //BubbleSort(a, 10); //print(a, 10); 直接排序法实验 //int a[10] = { 3,7,2,4,5,8,9,0,6,1 }; //SelectSort(a, 10); //print(a, 10); 插入法排序 //int a[10] = { 3,7,2,4,5,8,9,0,6,1 }; //InsertionSort(a, 10); //print(a, 10); 快速排序算法 //int a[10] = { 3,7,2,4,5,8,9,0,6,1 }; //QuickSort(a, 0, 9); //print(a, 10); //快速排序算法 int a[10] = { 3,7,2,4,5,8,9,0,6,1 }; MergeSort(a, 0, 9); print(a, 10); return 0;}