C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)

    虽然直接插入排序,冒泡排序以及二分查找是算法中最为基础以及老掉牙的话题,但作为一名算法的深爱者,有时候无聊时候总会将这些简单的话题重新理解并敲写一番,目的只是为了得到理解娴熟的程度。而且,我觉得越是简单基础的东西,有时候更应该反复的去敲写,深化它,并最终让其中的思想内化为自己的一部分。待到他日一提起之时,会相当娴熟的“刷刷刷。。。”几分钟搞定,那就很有成就感了!

    因为我喜欢对于一个问题进行实例的剖析,进而再转化为特有的用某种数学式子或者算法符号来表达,然后再附上一部分的算法伪代码,最终再“哒哒哒。。。”敲上自己的”艺术杰作“。而在这一过程,我喜欢在纸上思绪腾飞般胡乱描绘我的思路。。。

    首先是直接插入排序

    以下是自己的分析过程以及实例解析

    对应的代码:

/**直接插入排序:加强理解记忆*/#include 
#define N 7void DInsertSort(int* arr,int n){ int i,temp,pos,k; //从第二个元素开始 for (i=1;i
=0 && temp
=arr[k]   不管哪种情况,以下都适合 k += 1; //往后搬迁元素 while (pos>k) { arr[pos] = arr[pos-1]; pos -= 1; } //搬迁完毕,回填元素 arr[pos]=temp; }}int main(){ //int R[N]={0,2,3,1,5,7,0}; int R[N]={-1,-3,-5,-9,0,1,0}; printf("数组原先的元素: "); for (int i=0;i

 接着是冒泡排序:这一老掉牙的算法在这里提供两种实现方式--一种是传统的两两比较作交换,一种是加上一个change作为在一次比较中发现后续元素是否有序。

 代码如下:

/**冒泡排序:加强对其的理解*/#include 
#define N 7//传统的冒泡排序void BubbleSortOne(int* arr,int n,int& count){ int temp; for (int j=0;j
arr[i+1]) { temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; count += 1; } } }}//加上change标志的冒泡排序void BubbleSortTwo(int* arr,int n,int& count){ bool change=true; int temp; for (int j=0;j
arr[i+1]) { temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; change=true; count += 1; } } }}int main(){ //int R[N]={2,4,1,0,0,2,5}; int R[N]={1,0,2,0,7,3,5}; printf("原先数组的元素: "); for (int i=0;i

    最后是二分查找:在这里需要注意的是---1.二分查找需要查找的序列已经有序 2.在找到元素之后要跳出查找的循环。

    以下是分析过程

二分查找的代码:

/**二分查找:加强理解记忆*/#include 
#define N 7/*找到即返回元素在数组中的物理位置,找不到则返回-1*/int BinarySearch(int* arr,int n,int se){ int low=0,high=n-1; int mid=0,pos=-1; while (low<=high) { mid=(low+high)/2; if (se>arr[mid]) { low=mid+1; } else if (se

 总结:这一整个分析过程下来,感觉有助于提高自己的思考!!很美好