排序总结+全排列

void perm(int* num, int i) {
	int j, k, tmp;
    if(i < size) {
        for(j = i; j < size; j++) {
            tmp = num[j];
            for(k = j; k > i; k--)
                num[k] = num[k-1];
            num[i] = tmp;
            perm(num, i+1);
            for(k = i; k < j; k++)
                num[k] = num[k+1];
            num[j] = tmp;
        }
    }
    else { 
        for(j = 0; j < size; j++)
            per[n][j]=num[j]+'A';
        per[n][j]='\0';
        n++;
    }
}
//冒泡排序:
void BubbleSort() {
	for(int i=0;i<n - 1 ;i++) { 
		int flag = 0;
		for(int j=n-1;j > i;j--) {
			if(data[j] < data[j-1] ) {
				swap(data[j-1],data[j]);
				flag = 1;
			}			
		}
		if (flag == 0)
			break;
	}
}
//选择排序:
void SelectSort() {
	for (int i=0;i<n-1;i++) {
		int m=i;
		for (int j=i+1;j<n;j++) {
			if (data[j]<data[m])
				m=j;
		}
		if (i!=m)
			swap(data[i],data[m]);
	}
}
//插入排序:
void InsertSort() {
	int count = data.Length;
	for (int i = 1 ; i < count ; i++) {
		double t = data[i];
		int j = i;
		while (j > 0 && data[j - 1] > t) {
			data[j] = data[--j];
		}
		data[j] = t;
	}
}
//快速排序:
void ksort(int l, int h){ 	
	int e = h;
	int p = l;
	if (h < l + 2) return;
	while (l < h) { 
		while (++l < e && a[l]<=a[p]); 
		while (--h > p && a[h]>=a[p]); 
		if (l < h) {
			swap(a[l],a[h]);
		} 
	}
	swap(a[h],a[p]);
	ksort(p, h); 
	ksort(l, e);
}
//希尔排序:
void ShellSort() {
	int gap = 0;
	while (gap<=n) {
		gap = gap * 3 + 1;
    } 
    while (gap > 0) {
        for ( int i = gap; i < n; i++ ) {
            int j = i - gap;
            int temp = a[i];             
            while (( j >= 0 ) && ( a[j] > temp )) {
                a[j + gap] = a[j];
                j = j - gap;
            }
            a[j + gap] = temp;
        }
        gap = ( gap - 1 ) / 3;
    }    
}
//堆排序
int heapSize, length;
int A[100];
void max_heapify(int i) {
	int l = i*2;
	int r = i*2+1;
	int largest;
	if (l<=heapSize && A[l]>A[i])
		largest = l;
	else
		largest = i;
	if (r<=heapSize && A[r]>A[largest])
		largest = r;
	if (largest!=i) {
		swap(A[i],A[largest]);
		max_heapify(largest);
	}
}
void build_heap() {
	int i;
	heapSize = length;
	for (i=length/2;i>=1;i--)
		max_heapify(i);
}
void heapSort() {
	int i;
	build_heap();
	for (i=length; i >=2; i--) {
		swap(A[1],A[i]);
		heapSize--;
		max_heapify(1);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值