
思想就是在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后。之后再分别对上一波基准划分的小数区间与大数区间进行同样方式的排序。之后的分治办法也是很方便并行处理的。
C版的迷你程序——冒泡排序算法
C版的迷你程序——选择排序算法
C版的迷你程序——插入排序算法
C版的迷你程序——归并排序算法
#include#include #include #include void ShowSortPro(int arr[], int len) { int i; for (i=0; i = range.end) continue; int mid = arr[(range.start + range.end) / 2]; // 中间基点 int left = range.start, right = range.end; // 两端开始 printf("============================================================================== %d %dn", range.start, range.end); printf("============================================================================== mid %d %dn", (range.start + range.end) / 2, mid); do { while (arr[left] < mid) ++left; // 基点左 while (arr[right] > mid) --right; // 基点右 if (left <= right) { printf("%d ---- %d ", left, right); selfswap(&arr[left],&arr[right]); left++;right--; ShowSortPro(arr, len); } } while (left <= right); printf("============================================================================== mid %d %dnn", (range.start + range.end) / 2, mid); if (range.start < right) { r[p] = new_Range(range.start, right); p++; } if (range.end > left) { r[p] = new_Range(left, range.end); p++; } } } void main() { int arr[] = { 65, 75, 59, 26, 92, 19, 8, 67 }; int len; // sizeof是运算符,不是函数 // sizeof能求得静态分配内存的数组的长度,即占用内存的大小,以byte为单位 len = (int) sizeof(arr) / sizeof(arr[0]); //printf("%ld n", sizeof(arr)); //printf("%ld n", sizeof(arr[0])); ShowSortPro(arr, len); printf("============================================================STARTn"); QuickSort(arr, len); printf("============================================================ENDn"); ShowSortPro(arr, len); }
测试编译器对代码进行自动优化编译和不优化的耗时比较。感兴趣的可以试试其他级别的优化,这里要注意优化后程序的结果要正确耗时比较才有意义。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)