排序总结

第一种:冒泡排序

//冒泡排序且不输出
//每一趟确定a[loc]的值
void bubbleSort(int a[], int size)
{
	int temp, loc, i;
	for (loc = size - 1; loc >= 1; loc--)
	{
		for (i = 0; i < loc; i++)
		{
			if (a[i]> a[i + 1])//若为降序,则只改变此处的‘>’为‘<’
			{
				temp = a[i];
				a[i] = a[i + 1];
				a[i + 1] = temp;
			}
		}
	}
}
/*冒泡排序算法2:升序排序,以pass作为循环控制变量*/
void bubbleSortDown2(int a[],int size)
{
	int pass,i,temp;
	/*总共需要比较size-1趟。每一趟确定a[size-pass]的值*/
 	for(pass=1;pass<=size-1;pass++){	
	/*从下标为0~size-pass数组元素中依次进行比较交换*/  
	 	for(i=0;i<=size-pass-1;i++) 
	 	     if(a[i]>a[i+1]){ /*交换*/
			temp=a[i];
			a[i]=a[i+1];
			a[i+1]=temp;
	      }
   }   

第二种:选择排序

/* 函数功能:选择排序(降序)
参数说明:数组,数组中已有元素个数*/
void selectSortDown(int data[], int elementCount)
{
	int i, maxLoc, temp;

	for (i = 0; i <= elementCount - 2; i++) 
	{
		maxLoc = findMax(data, i, elementCount - 1);
		if (i != maxLoc) 
		{
			temp = data[i];
			data[i] = data[maxLoc];
			data[maxLoc] = temp;
		}
	}
}
/* 函数功能:找数组中的最大值元素,并返回其下标
参数说明:数组名,查找起始位置下标,查找终止位置下标*/
int findMax(int data[], int startLoc, int endLoc)
{
	int i, maxloc;

	maxloc = startLoc;
	for (i = startLoc + 1; i <= endLoc; i++)
		if (data[i] > data[maxloc])//若要改为升序,更改此处的不等号即可!
			maxloc = i;

	return maxloc;
}

第三种:插入排序

void insertSort(int a[],int n)
{
	int temp,j,i;
	for(i=1;i<n;i++)
	{
		j=i-1;
		if(a[j]>a[i])//当前面元素大于后面元素时 
		{
			temp=a[i];//将当前元素存为temp,逐一与前一元素比较 
			a[i]=a[j];
			while(a[j-1]>temp)
			{
				a[j]=a[j-1];
				j--;
			}
			a[j]=temp;
		}
	}
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值