【算法】插入排序、冒泡排序、选择排序、归并排序 C语言实现

 简单算法就直接上代码了

  • 插入排序 

void
printval(int *a, int n)
{
	for (int i = 0; i < n; ++i)
		std::cout << a[i] << std::endl;
}

void 
insertsort(int *a, int n)
{
	for (int i = 1; i <= n - 1; i++){
		int j = i - 1;
		//val 表示待排序数据
		int val = a[i];
		for (; j >= 0; j--){
			//如果待插入数据比当前值小
			if (val < a[j]){
				//将当前数据向后移动一位
				a[j + 1] = a[j];
			}
			//否则说明待插入数据大于当前数值
			else
				break;
		}
		a[j+1] = val;
		printval(a, n);
		std::cout << "_________after one sort" << std::endl;
	}
}
  • 冒泡排序
void 
myswap(int a[], int i, int j)
{
	int tmp = a[i];
	a[i] = a[j];
	a[j] = tmp;
}

void 
bubblesort(int a[], int n)
{
	if (a == NULL || n < 2)
		return;
	for (int end = n - 1; n > 0; n--){
		for (int i = 0; i < end; i++){
			if (a[i] > a[i + 1]){
				myswap(a, i,i+1);
			}
		}
	}
}
  • 选择排序
void 
selectsort(int a[], int n)
{
	if (a == NULL || n < 2)
		return;
	for (int i = 0; i < n; i++){
		int min = i;
		for (int j = i + 1; j < n; j++)
			min = a[min] < a[j] ? min : j;
		myswap(a, i, min);
	}
}
  • 归并排序
void 
mergesort(int a[], int n)
{
	if (a == NULL || n < 2)
		return;
	mergesort(a, 0, n - 1);
}

void 
mergesort(int a[], int l,int r)
{
	if (a == NULL || (r-l+1) < 2)
		return;
	int mid = l + ((r-l)>>1);
	mergesort(a, l, mid);
	mergesort(a, mid+1, r);
	merge(a, l,mid,r);
}


void 
merge(int a[], int l,int m, int r)
{
	//计算数组长度
	int len = r - l + 1;
	//分配辅助空间大小
	int *temparry = (int *)malloc(sizeof(int)*len);
	int i = l;
	int j = m+1;
	//辅助空间数组的下标
	int index = 0;
	while (i <= m && j <= r){
		temparry[index++] = a[i] < a[j] ? a[i++] : a[j++];
	}
	//拷贝剩余部分
	while (i <= m){
		temparry[index++] = a[i++];
	}
	while (j<=r)
		temparry[index++] = a[j++];
	//将辅助数组内容拷贝至原数组
	for (int i = 0; i < len; i++)
		a[l + i] = temparry[i];
	delete temparry;
}




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值