FanControl终极指南:5个简单步骤让你的电脑既安静又高效
2026/6/14 16:28:53
// 合并两个已排序的子数组voidmerge(intarr[],intleft,intmid,intright) {inti, j, k;intn1 = mid - left +1;// 左子数组的大小intn2 = right - mid;// 右子数组的大小// 创建临时数组int*L = (int*)malloc(n1 *sizeof(int));int*R = (int*)malloc(n2 *sizeof(int));// 拷贝数据到临时数组for(i =0; i < n1; i++)L[i] = arr[left + i];for(j =0; j < n2; j++)R[j] = arr[mid +1+ j];// 合并临时数组回原数组i =0;// 初始化左子数组的索引j =0;// 初始化右子数组的索引k = left;// 初始化合并子数组的索引while(i < n1 && j < n2) {if(L[i] <= R[j]) {arr[k] = L[i];i++;}else{arr[k] = R[j];j++;}k++;}// 拷贝左子数组剩余的元素(如果有)while(i < n1) {arr[k] = L[i];i++;k++;}// 拷贝右子数组剩余的元素(如果有)while(j < n2) {arr[k] = R[j];j++;k++;}// 释放临时数组内存free(L);free(R);}// 归并排序主函数voidmergeSort(intarr[],intleft,intright) {if(left < right) {// 计算中间点,避免溢出intmid = left + (right - left) /2;// 递归排序左半部分mergeSort(arr, left, mid);// 递归排序右半部分mergeSort(arr, mid +1, right);// 合并已排序的两部分merge(arr, left, mid, right);}}// 交换两个元素的值voidswap(int* a,int* b) {inttemp = *a;*a = *b;*b = temp;}// 分区函数,返回基准元素的最终位置intpartition(intarr[],intlow,inthigh) {intpivot = arr[high];// 选择最后一个元素作为基准inti = (low -1);// i是小于基准的元素的索引for(intj = low; j <= high -1; j++) {// 如果当前元素小于或等于基准if(arr[j] <= pivot) {i++;// 增加iswap(&arr[i], &arr[j]);// 交换元素}}swap(&arr[i +1], &arr[high]);// 将基准放到正确的位置return(i +1);}// 快速排序主函数voidquickSort(intarr[],intlow,inthigh) {if(low < high) {// pi是分区索引,arr[pi]现在在正确的位置intpi = partition(arr, low, high);// 分别对分区前后的子数组进行排序quickSort(arr, low, pi -1);quickSort(arr, pi +1, high);}}。
---------------------
作者:dffzh
链接:https://bbs.21ic.com/forum.php?mod=viewthread&tid=3458580
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。