/* * File: main.cpp * Author: Administrator * * Created on 2010年8月22日, 下午11:44 */ #include <iostream.h> #include <iomanip.h> #include <math.h> //using namespace std; /* * */ /* *快速排序 * */ union pw { int i; char ch[2]; }; void swap(int &a, int &b); int *h2b(int t, int *p); int quikSort(int *a, int i, int j); void quikSorts(int a[], int i, int j); void sort(int *p); void bookSort(int *p); int result[32]; int old[ ] = {8, 9, 100, 2, 88, 700, 882, 954, 123, 3243, 132, 345, 124, 567, 1235, 7645, 7, 231, 678, 412, 5, 6785, 6241, 6456, 4562, 342, 64, 56456, 3453}; int old2[ ] = {8, 9, 100, 2, 88, 700, 882, 954, 123, 3243, 132, 345, 124, 567, 1235, 7645, 7, 231, 678, 412, 5, 6785, 6241, 6456, 4562, 342, 64, 56456, 3453}; int old3[ ] = {8, 9, 100, 2, 88, 700, 882, 954, 123, 3243, 132, 345, 124, 567, 1235, 7645, 7, 231, 678, 412, 5, 6785, 6241, 6456, 4562, 342, 64, 56456, 3453}; int main() { sort(old); for (int i = 0; i < 29; i++) { cout << old[i] << '/t'; } cout << "=======================" << endl; bookSort(old2); for (int i = 0; i < 29; i++) { cout << old2[i] << '/t'; } cout << "=======================" << endl; quikSorts(old3, 0, 28); for (int i = 0; i < 29; i++) { cout << old3[i] << '/t'; } return 0; } int quikSort(int *a, int i, int j) { if (i+1>= j)return 0; //排序结束 int start, end; start = i; end = j; int key = a[i]; //假设第一个元素为关键数字 while (true) { if(i>=j)break; //<1>由后向前查找小于关键数字的元素 while (j > i && a[j] >= key) { j--; } swap(a[j], a[i]); //j--; /**step3 over,step4 start**/ while (j > i && a[i] < key) { i++; } swap(a[i], a[j]); //i++; }// do step3,4; a[i] = key; quikSort(a, start, i - 1); quikSort(a, j + 1, end); } void quikSorts(int a[],int low,int high) { if( low < high) { int i = low,j = high ,temp; temp = a[i]; while(i < j) { while(a[j] >= temp && i < j) { j--; } a[i] = a[j]; while(a[i] <= temp && i < j) { i++; } a[j]= a[i]; } a[i] = temp; quikSorts(a,low,i -1); quikSorts(a,j+1,high); }//if } void sort(int *p) { for (int i = 0; i < 29; i++) { for (int j = i; j > 0; j--) { if (p[j] < p[j - 1]) { p[j] = p[j - 1] - p[j]; p[j - 1] = p[j - 1] - p[j]; p[j] = p[j - 1] + p[j]; } else { break; } } } } void bookSort(int *p) { for (int i = 0; i < 29; i++) { for (int j = 0; j < 29 - 1 - i; j++) { if (p[j] > p[j + 1]) { p[j + 1] = p[j] - p[j + 1]; p[j] = p[j] - p[j + 1]; p[j + 1] = p[j] + p[j + 1]; } } } } int *h2b(int t, int *p) { int i = 31; do { p[i] = t % 2; t = (int) t / 2; i--; } while (t != 0); for (int j = 0; j < 32; j++) { cout << p[j]; } cout << endl; return p; } void swap(int &a, int &b) { a = b - a; b = b - a; a = b + a; }