冒泡、选择、插入、希尔、快速、归并排序

c语言冒泡、选择、插入、希尔、快速、归并排序

#include<iostream>
using namespace std;
int getlength(int a[]);
void insertion(int a[]);

int a[] = { 3,42,54,2312,312345,235423,5346,6356,6353,346,34,346,534,354,1 };

void insertion(int a[]) {  
	int i, j;
	int key;
	for (j = 1; j < getlength(a); j++) {
		key = a[j];
		
		for (i = j - 1;i >= 0 && a[i] > key; i--) {
			a[i + 1] = a[i];
		}
		a[i+1] = key;

	}


}

int getlength(int a[]) {
	int L = 0;
	int i = 0;
	while (a[i]) {
		L++;
		i++;
	}
	return L;
}



void bubble(int* a) {
	
	for (int i = 0; i < getlength(a); ++i) {
		for (int j = 0; j < getlength(a) - 1 - i; ++j) {
			if (a[j] > a[j + 1]) {
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}

void seclection(int a[]) {
	int i, j, key;
	for (i = 0; i < getlength(a); ++i) {
		key = i;    
		for (j = i; j < getlength(a); ++j) {
			if (a[j] < a[key]) {
				key = j;
			}
		}
		int temp;
		temp = a[key];
		a[key] = a[i];
		a[i] = temp;
		
	}
}

void hell(int* a){
	int step = getlength(a) / 2;
	int i; int j;
	for (step; step > 0; step = step/2) {
		for (i = step; i<getlength(a); i++) {
			int temp = a[i];
			for (j = i - step; j >= 0 && a[j]>temp; j = j - step) {
				a[j + step] = a[j];
			}
			a[j+step] = temp;
		}
	}
}

void quick(int a[], int low, int high) {
	if (low >= high) {
		return;
	}
	int l = low, h = high, x = a[low];
	while (l < h) {
		if (a[h] < x) {
			a[l] = a[h];
			a[h] = x;
			l++;
			if (a[l] > x) {
				a[h] = a[l];
				a[l] = x;
				h--;
			}
			else {
				l++;
			}
		}

		else {
			h--;
		}
	}
	a[l] = x;
	quick(a, low, l - 1);
	quick(a, l + 1, high);
			

}
void merge(int* a, int* b,int start, int end) {
	if (start >= end) {
		return;
	}
	int s = start, e = end, m = (start+end)/2;
	int s1 = s, s2 = m+1, e1 = m, e2 = e;
	merge(a, b, s1, e1);
	merge(a, b, s2, e2);

	int i = start;
	
	
	while (s1<=e1&&s2<=e2)
	{	
		if (a[s1] > a[s2]) {
			b[i++] = a[s2];
			s2++;
		}
		else {
			b[i++] = a[s1];
			s1++;
		}
	}
	
	while (s2 <= e2) {
		b[i++] = a[s2++];
	}
	
	
	while (s1 <= e1) {
		b[i++] = a[s1++];
	}
	for (i = start; i <= end; i++) {
		a[i] = b[i];
	}
	
	
	

}

int main() {

	cout << getlength(a) << endl;
	cout << "====================" << endl;
	//insertion(a);
	//bubble(a);
	//seclection(a);
	//hell(a);
	//quick(a,0,getlength(a)-1);
	int* b = (int*)malloc(20 * sizeof(int));
	//merge(a, b, 0, getlength(a) - 1);
	free(b);
	for (int i = 0; i < getlength(a); ++i) {
		cout << a[i]<<"->";
	}
	cout << endl;
	/*int q = 10;
	q=q>>1;
	cout <<"q:"<< q<<endl;*/
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值