查找和排序是计算机应用中较为基础同时也很重要的两个组成成分。特别是当今网络如此盛行,Internet上充斥着各种各样的数据,图片,文本,音视频等,用户如何搜寻自己想要的数据,服务者如何及时有效的将用户的需求返回,都需要这些基础算法的帮助。在本人复习数据结构的时候,特意结合网上各位大牛的神贴,以及自己的一些理解,整理了一下一些常用的查找和排序算法,如有雷同之处,请各位大牛多多包涵。
基于比较的算法:
1. 选择排序
在众多的排序算法中,选择排序应该是最容易理解的一个算法了。其平均时间复杂度为O(n^2),空间复杂度则是O(1), 并且选择排序是不稳定的排序(值相同的两个元素在排序之后相互位置可能发生变化)。
选择排序是一个递归的查找比较算法:
(1)遍历一次尚未排序的数组元素,找到其中最大的元素,
(2)将其与尚未排序的数组最后一个元素互换
(3)将找到的最大元素从未排序的数组元素中取出
(4)其余未排序数组元素,重复操作(1),直到未排序数组中没有剩余元素。
1 void insertion_sort(int a[],int length) 2 { 3 for(int i=length -1; i>0;i--) 4 { 5 int maxData = a[i]; 6 int index =0; // 寻找最大元素 7 for(int j=0;j<i;j++) 8 { 9 if(maxData < a[j]) 10 { 11 maxData = a[j]; 12 index =j; 13 } 14 } // 是否需要交换位置 15 if(maxData != a[i]) 16 { 17 swap(a[i],a[index]); 18 } 19 } 20 }