算法
lemon13467
这个作者很懒,什么都没留下…
展开
-
归并排序怎么写,看这里( MergeSort 和 _MergeSort )
//归并排序是将两个已经排好序的数列,以某一种顺序整合在一起的排序算法//前提是要有两个已经排好序的数列! //_MergeSort是MergeSort函数的一个子函数,通过不断地分治到单独的数上 //来为归并算法提供前提,使要归并的两个数列有序 //通过_MergeSort函数反复的递归调用来实现将一个无序的数列排好序 //tmp开辟出来的空间的作用是://将排好序的数列放到tmp开辟的空间中,然后再将tmp空间里的数列放到原数组中//实现了一个替换的作用void _Me原创 2021-05-24 22:14:12 · 550 阅读 · 2 评论 -
经典排序——二路选择排序(同时选出最大和最小的数)
*二路选择排序是在选择排序的基础上进行的改进,在一次循环中同时选出最大和最小的数,分别放到序列尾和序列头,提高了排序的效率void SelectSort(int *a, int n){ int begin =0, end = n - 1; while (begin < end) { int mini = begin, maxi = begin; for (int i = begin; i <= end; ++i) { if (a[i] < a[mini]).原创 2021-05-12 20:11:26 · 577 阅读 · 4 评论 -
新出炉的希尔排序(面试必备)
*希尔排序是插入排序的优化版,在插入排序的基础上,大大提高了排序的效率是基于以gap为间隔形成的数列进行的预排序,gap从大到小,最终变成1,就是最直接的插入排序//1.预排序(接近有序)//2.插入排序void ShellSort(int *arr, int n){ int gab = n; while (gab > 1) { gab /= 2; //每次建议gap为2或者为3 if (gab == 0) { gab = 1; //执行gap=1的时候就原创 2021-05-12 19:41:34 · 253 阅读 · 2 评论 -
大家期待已久的堆排序终于来了(堆的创建&&堆的排序)
#include <stdio.h>#pragma warning(disable:4996)//堆的实现//向下调整算法 前提:树的左右子树都是堆(大堆或者小堆),才能调整//此例为为小堆void Adjust(int *a, int n, int root){ int parent = root; int child = 2 * parent + 1; while (child < n) { //当右孩子存在,并且右孩子小于左孩子 //chil原创 2021-03-29 18:04:28 · 2303 阅读 · 6 评论 -
经典排序算法——最易懂的快速排序介绍
#include <stdio.h>#pragma warning(disable:4996)void quicksort(int *arr, int left, int right){ //要有递归的控制判断 if (left>right) { return; } //否则的话,如递归所有控件路径,函数将导致运行时堆栈溢出 int l = left; int r = right; int key = arr[left];//找第一个数为基准数原创 2021-03-07 21:43:39 · 401 阅读 · 4 评论 -
教会你二分查找算法如何写
●二分查找是在一组有序数组中,查找某个指定元素,若找到则返回该元素的下标设置首元素的下标left、尾元素的下标right、还有一个重要的下标就是中间元素的下标mid如果所查找的指定元素大于中间元素,那么left+1,如果所查找的指定元素小于中间元素,那么right-1,若指定元素与中间元素相等,则返回下标mid;int midfind(int *str,int n,int key){ int left=0; int right=n-1; while(left<=right)原创 2020-11-20 12:16:07 · 698 阅读 · 4 评论 -
冒泡排序&&优化后的冒泡排序
●冒泡排序法void bubblesort(int *arr,int n){ int i=0; int j=0; for(i=0;i<n-1;i++) //注意判定条件 { for(j=0;j<n-i-1;j++) //注意判定条件 { if(arr[j]>arr[j+1]) { int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } } }int ma原创 2020-11-13 19:26:31 · 512 阅读 · 0 评论 -
插入排序法介绍(通俗易懂)
●插入排序法void Insertsort(int *num,int n) { int i=0; int j=0; int temp=0; for(i=1;i<n;i++) { temp=num[i]; j=i-1; while(j>=0&&temp<num[j]) { num[j+1]=num[j]; j--; } num[j+1]=temp;} }int main(){ in原创 2020-11-13 18:42:55 · 559 阅读 · 0 评论 -
如何写一个选择排序法
●选择排序法 void fun(int *arr,int n) { int i=0; int j=0; int k=0; int temp=0; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(arr[k]<arr[j]) { k=j; } } if(k!=i) { temp=arr[k]; arr[k]原创 2020-11-13 18:30:28 · 552 阅读 · 0 评论