查找算法
顺序查找
顺序查找一般又称为线性查找,它对顺序表和线性表都适用。对于顺序表,可以通过数组下标递增来顺序扫描每一个元素;对于链表,可以通过指针next来依次扫描元素。
下面是示例代码
//
int Search_Seq(int *data,int data_num,int key){
for(int i=0;i<data_num;i++){
if(data[i]==key)
return i;
}
return -1;
}
折半查找
折半查找又分为二分查找,它仅仅适用于有序的顺序表。
int Binary_Search(int *data,int data_num,int key){
int low=0,high=data_num-1;
int mid;
while(low<=high){
mid=(low+high)/2;
if(data[mid]==key)
return mid;
else if(data[mid]<key)
{
high=mid-1;
}
else{
low=mid;
}
}
return -1;
}
分块查找
分块查找又称之为索引顺序查找,它吸取了顺序查找和折半查找各自的优点,既有动态结构,又适用于快速查找。
分块查找的基本思想:将查找表分为若干块。块内的元素可以无序,但是快间的元素是有序的。分块查找的基本步骤是现在索引里面查找记录所在的快,可以顺序查找和折半查找;第二步是在块内顺序查找
排序算法
插入排序
插入排序是一种简单直观的排序算法,其基本思想是将一个待排序的记录按其关键字大小插入前面已经排好序的子序列,直到全部记录插入完成
直接插入排序算法
就是按照顺序对列表进行排序
时间复杂度O(n2)O(n^{2} )O(n2)空间复杂度O(1)O(1)O(1)
void InsertSort(int *data,int n){
int i,j;
for(i=1;i<n;i++){
if(data[i]<data[i-1]){
int temp=data[i];
for(j=i-1;temp<data[j];j--){
data[j+1]=data[j];
}
data[j+1]=temp;
}
}
}
折半插入排序
直接插入排序每一趟都有重新遍历一遍前面的节点,并且前面的算子是有序的,这样就可以用折半插入排序,这样在一定条件下时间可以减半,待确定插入位置之后,再统一的向后移动元素
折半插入排序的空间复杂度为$O(n\log_{2}{n}) 时间复杂度时间复杂度时间复杂度O(n^{2} )$
void InsertSort(int *data,int n){
int i,j,low,high,mid;
for(i=1;i<n;i++){
low=0;
high=i-1;
int temp=data[i];
while (low<=high)
{
mid=(low+high)/2;
if(temp<data[mid])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;j--)
data[j+1]=data[j];
data[j+1]

本文详细介绍了顺序查找、折半查找、分块查找等查找算法,以及插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序和基数排序等排序算法,展示了它们的原理、示例代码和时间复杂度分析。
最低0.47元/天 解锁文章
311

被折叠的 条评论
为什么被折叠?



