常见查找和排序算法汇总

主要内容:

顺序查找、折半查找-------查找算法
冒泡排序、简单选择排序、直接插入排序、希尔排序、归并排序、快速排序、堆排序------排序算法
在这里插入图片描述

一、查找

1、顺序查找
从最后一个记录开始,逐个进行比较,若相等则查找成功,否则查找失败。

//顺序查找  a[1 - len]
int Sq_Search(int a[],int key,int len)
{
   
	int i;
	//哨兵,使内循环不用判断数组是否越界,提高程序运行效率,减少查找时间
	a[0] = key;	
	for(i = len;a[i] != key;i--) ;
	
	return i;
}

2、折半查找

在折半查找中,查找一个值相当于在一个满二叉树中查找,计算平均查找次数时可利用满二叉树性质。

//折半查找  a[0 - len-1]
int Bi_Search(int a[],int key,int len)
{
   
	int i,low,mid,high;
	low=0;high=len-1;
	while(low<=high)
	{
   
		mid = (low+high)/2;
		if(a[mid] == key)
			return mid;
		else if(a[mid] > key)
			high = mid-1;
		else
			low = mid +1; 
	}
	return -1;	//查找失败返回-1
 } 

二、排序(升序)

1、冒泡排序

排序思想:从前往后依次比较前后两个相邻元素,将大的置于右端,小的置于左端;如此,每轮可以将一个值置于其最终位置,n-1轮后数组有序。

稳定性:稳定,当元素相等时,并不会发生交换
空间效率:O(1)
平均情况:O(n^2)
最坏情况:O(n^2),序列逆序时
最优情况:O(n),序列有序时

代码:

#include<stdio.h>
void swap(int &a,int &b)
{
   
	int t;
	t = a; a = b; b = t;
}
void Bubble_Sort(int a[],int n)
{
   
	int i,j;
	for(i = 0;i < n-1;i++)
	{
   
		for(j = 0;j < n-i-1;j++) //每一轮都有个最大值到达尾部(-i)
		{
   
			if(a[j] > a[j+1])
				swap(a[j],a[j+1]);
		}
	}
}
int main()
{
   
	int A[10] = {
   1,7,5,3,9,8,2
  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值