排序--------简单排序

/*-------冒泡排序----------
    函数名: bubble_sort
	功能  : 实现升序排序
	参数  : 带排序的数组,数组的长度
	返回值 :为空
	描述:时间复杂度为O(n^2),辅助空间为O(1);
	      有一种变形的冒泡排序-- 鸡尾酒排序,
		  它是双向的冒泡排序,时间复杂度也为O(n^2).
	-------------------------*/
void bubble_sort(int *bubble, int Length)
{
	int i,j;
	int  temp;
	int count;
	count = Length;
	for(i = 0; i < Length; i++)
	{
		count--;             //每一次产生最大数后,下面要遍历的数组长度减1;
		for(j = 0; j < count; j++)
		{
			if(bubble[j] < bubble[j+1])
			{
				temp = bubble[j];
				bubble[j] = bubble[j+1];
				bubble[j+1] = temp;
			}
		}
	}
}

/*--------插入排序-----------
    函数名: insert_sort
	功能  : 实现升序排序
	参数  : 带排序的数组,数组的长度
	返回值 :为空
	描述:时间复杂度为O(n^2),辅助空间为O(1);
	-------------------------*/
void insert_sort(int *insertion, int Length)
{
	int i,j;
	int temp;
	for(i = 0; i < Length; i++)
	{
		for(j = i; j >= 1; j--)
		{
			if(insertion[j] > insertion[j-1])
			{
				temp = insertion[j];
				insertion[j] = insertion[j-1];
				insertion[j-1] = temp;
			}
		}
	}
}
/*--------选择排序-----------
    函数名: select_sort
	功能  : 实现升序排序
	参数  : 带排序的数组,数组的长度
	返回值 :为空
	描述:时间复杂度为O(n^2),辅助空间为O(1);
	-------------------------*/
void select_sort(int *selection, int Length)
{
	int i, j;
	int flag=0,temp;//flag标志最小的位置
	int Min;
	for(i = 0; i < Length; i++)
	{
		Min = selection[i];
		for(j = i; j < Length; j++)
		{
			if(Min > selection[j])
			{
				flag = j;
				Min = selection[j];
			}
		}
		temp = selection[i];
		selection[i] = Min;
		selection[flag] = temp;
	}
}

  关于冒泡排序的,后来看到如果在进行length遍之前就已经排序好的话,也就会做白白的循环,所以下面改了程序设置了一个标志,但没有发生交换的时候,证明已经排完序了。

 

void bubble_sort(int *bubble, int Length)  
{  
    int i,j;  
    int  temp;  
    int count, flag = 0;  
    count = Length;
	
    for(i = 0; i < Length; i++)  
    {  
        count--;             //每一次产生最大数后,下面要遍历的数组长度减1;  
        for(j = 0; j < count; j++)  
        {  
            if(bubble[j] > bubble[j+1])  
            { 
				flag = 1;
                temp = bubble[j];  
                bubble[j] = bubble[j+1];  
                bubble[j+1] = temp; 
            } 
			

        }  
		if(flag == 0)
			{
				break;
			}
		else
		{
			flag=0;
		}
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值