排序总结+全排列
来源:互联网 发布:苹果电脑做淘宝方便吗? 编辑:程序博客网 时间:2024/05/01 20:35
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;elselargest = 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);}}