void CountingSort(int *A, int *B, int n, int k) { int *C = (int *)malloc(sizeof(int) * (k + 1)); int i; for (i = 0; i <= k; i++) { C[i] = 0; } for (i = 0; i < n; i++) { C[A[i]]++; } for (i = 1; i <= k; i++) { C[i] = C[i]...
反向填充目标数组:将每个元素i放在新数组的第 C(i) 项,每放一个元素就将 C(i) 减去 1。 8.2 动图演示 8.3 代码实现 voidcounting_sort(intarr[],intn){if(arr ==NULL)return;// 定义辅助空间并初始化intmax = arr[0], min = arr[0];inti;for(i =1; i < n; i++) {if(max < arr[i]...
//void bubbleSort(){//C实现intarr[] = {5,9,3,8,6};intlen= sizeof(arr)/sizeof(arr[0]);inttemp;for(inti =0; i <len-1; i++)//从小到大{// 外循环为排序趟数,len个数进行len-1趟for(intj =0; j <len-1- i; j++) {// 内循环为每趟比较的次数,第i趟比较len-i次,因为第...
1)找出待排序的数组中最大元素 2)统计数组中每个值为 i 的元素出现的次数,存入计数数组C的第 i-1 项 3)遍历计数数组C,将统计好的元素取出来放回原始数组 2. 代码 void BSortMethod::countingSort(int *vec, int len) { if ( len <= 0 ) { return; } // 找到数组最大值 int max = vec[0];...
C语言进阶之路2021-01-18 22:33:55 下面的99%的代码都是手动敲出来的,参考了诸多资料,已经经过测试,可以放心食用。 1.冒泡排序 基本思想 冒泡排序基本思想是依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该...
[i++]; //前面的子表未检测完 } void MergeSort(vector<int>& nums,int low,int high, vector<int>& tmp) { //直接传一个辅助数组节省空间 if(low < high) {//c int mid = (low + high) / 2;//划分 MergeSort(nums, low, mid,tmp); MergeSort(nums, mid+1, high,tmp); Merge(nums,...
更多十大经典排序算法请戳我的 Github 仓库@LeetCode-C 03. 插入排序(InsertionSort) 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已...
代码实现: publicstaticvoidmergeSort(int[]arr){// 主函数if(arr==null||arr.length<2){return;}mergeSort(arr,0,arr.length-1);}//1.递归分解数组publicstaticvoidmergeSort(int[]arr,intl,intr){if(l==r)return;intm=l+((r-l)>>1);//注:算数运算符优先级大于移位!mergeSort(arr,l,m);merge...
二、代码实现 #include <stdio.h> // 打印数组,方便观察结果 void print_array(int a[], int n) { for(int i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); } // 冒泡排序算法 void bubble_sort(int a[], int n) ...
插入排序(inertionSort),插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。