
排序
排序算法
code-016
有问题请私信,停更一段时间。
展开
-
【七】归并排序
归并排序归并排序的思想:类似于二叉树的后序遍历(根左右)。(递归过程中分组,回归过程中排序合并数据)//归并排序(递归)#if 1//有序合并void Merge(int* src, int* des, int left, int mid, int right){ int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { des[k++] = src[原创 2022-04-12 17:23:48 · 581 阅读 · 0 评论 -
【六】快速排序
快速排序(快排两种实现方式)(一)递归实现#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>int onequick(int* arr, int left, int right){ if(arr == NULL || right - left <= 0) return -1; int tmp = arr[left]; int i =原创 2021-11-05 22:29:10 · 168 阅读 · 0 评论 -
【八】基数排序
基数排序:基数排序是针对有多个关键字(每个关键字的权重不同)的排序算法: 炸金花(花色,数字)。 针对于一组整形数据: 按照权重划分(个位,十位,百位,千位 … )。 按照从小权重到大权重进行处理。对于一个数据,拿到这一位的值,将原始数据存储到相应的队列中。一共有关键字取值范围的队列(0,1,2,3,4,5,6,7,8,9)。整个数据序列全部放入到队列后,按照队列顺序将其中的数据全部Pop出来,在放回到数组中。 基数排序数据之间不需要比较。基数排序逻辑图此时待排序序列已经有序原创 2021-04-18 16:05:07 · 379 阅读 · 0 评论 -
【五】堆排序
1、声明#pragma once//创建大根堆void CreateHeap(int* arr, int len);//调整大根序列void Adjust(int* arr, int len, int root);//交换void Swap(int* p, int* q);//堆排序,去除最大根,其余元素重新组成大根堆依次循环直至剩余一个元素void HeapSort(int* arr, int len);//输出void ShowArr(int* arr, int len);原创 2021-04-07 16:40:39 · 261 阅读 · 0 评论 -
【四】希尔排序
1、思路希尔排序:也叫做缩小增量排序。分组排序(分组的组数需要循环递减,直到只剩一组);先将待排序序列分成若干组,然后再使用直接插入排序在组内排序。外循环控制组数减少,内循环控制直接插入排序。所有的分组数都互为质数;2、希尔排序代码void Shell(int *arr, int len, int width){ for(int i = width; i < len; ++i) { int tmp = arr[i]; int j = i - width; for(; j原创 2021-04-04 17:25:04 · 290 阅读 · 0 评论 -
【三】插入排序
1、思路:将待排序序列看成两部分,左部分为已经有序的,右部分为无序的(第一次左部分只有一个数据)。外循环从右部分拿一个数据插入到左部分中(从左部分的最后一个数据开始内循环比较,如果比拿的数据大,则将其向后挪动一个位置,直到找到比他小的,或者左部分遍历完),并且使得插入后的结果依旧有序。直到有部分没有数据为止!2、插入排序代码//直接插入排序void InsertSort(int* arr, int len){ int tmp = arr[0]; //i就是右部分第一个数据的下标 for (原创 2021-04-04 16:43:20 · 269 阅读 · 0 评论 -
【二】选择排序
1、选择排序思路:先遍历一遍待排序序列,从中标记最大的(最小的)数的下标,将标记的数和最后一个数(第一个数)进行交换。除去这次找的数,其余数再循环此过程,直至剩余一个数;2、代码实现#include <stdio.h> #include <stdlib.h>//输出void ShowArr(int* arr, int len){ for (int i = 0; i < len; i++) { printf("%d ",arr[i]); } prin原创 2021-04-04 15:41:08 · 283 阅读 · 0 评论 -
【一】冒泡排序
一、冒泡排序1、定义:所谓冒泡排序就是每一次排序依次两两比较,都将最大的数放在最后(最后的位置就是水面,最大的数就是大的泡泡),下一次比较就不用再考虑最后一个元素,依次进行排序比较,直至剩余一个元素。思路:假设有len个元素,用两重循环即可实现冒泡排序算法,外循环控制排序的次数i(小于len-1次),内循环控制两两元素比较的次数j(<len-1-i次),每一次排序后,下一次的比较次数-1,直至剩下一个元素,排序结束。2、例如:如下图所示(注意下标从零开始)3、代码实现#include&原创 2021-03-28 13:07:30 · 416 阅读 · 0 评论