0
点赞
收藏
分享

微信扫一扫

冒泡,选择,插入对比代码

最不爱吃鱼 2022-03-11 阅读 73

/*o(n^2) time efficiency*/

 

//冒泡排序 o(n^2) o(1) stable

//冒泡排序 o(n^2) o(1) stable
void Bubbing(int a[],int n)//数组的a[0] 不保存元素  
{
	int k = 1,t = 0,i = 0;
	while(k == 1 && i < n)
	{
		k = 0;//初始化 
		for(int j = 1;j < n - i;j ++)
		{
			if(a[j] < a[j + 1])
			{
				k = 1;
				//swap
				t = a[j];a[j] = a[j + 1];a[j + 1] = t;
			}
		}
		i ++;
		//如果到这k仍为0,说明冒泡没有发生交换,排序结束 
	}
	
	return;
}

//选择排序 o(n^2) o(1) instable

//选择排序  o(n^2) o(1) instable
void Select(int a[],int n)//数组的a[0] 不保存元素 
{
	int k = 0,i = 1,x,t;
	while(i < n)
	{
		k = i;
		for(int j = i;j < n;j ++)
		{
			if(a[j] < a[k])
			{
				k = j;
			}
		}
		if(k != i)//存在比i下标所指 小的元素,且k保存的是该元素的下标 
		{
			//swap
			t = a[k];a[k] = a[i];a[i] = t;
		}
		
		i = i + 1;//找到一个元素 
	}
	return;
}

//插入排序 o(n^2) o(1) stable


//插入排序 o(n^2) o(1) stable
void Insert(int a[],int n)//数组的a[0] 不保存元素 
{
	int t = 0,j = 0;
	for(int i = 2;i < n;i ++)
	{
		a[0] = a[i];
		j = i - 1
		//寻找a[i] 插入点 
		while(a[j] > a[0])//当a[j] < a[0]时 或者 a[j] = a[0]时(此时j=0)退出 
		{
			a[j + 1] = a[j];//往后移 
			j --;
		}
		a[j + 1] = a[0];//插入点 放入插入值 
	}
	
	return;
}
举报

相关推荐

0 条评论