1 #include <iostream>
  2 #include <ctime>//取随机数用时间做种
  3 #include <cstdlib>
  4 #include <time.h>//计算用时
  5 #include <algorithm>
  6 #include <stdio.h>//输出文件用
  7 #include <iomanip>//
  8 using namespace std;
  9 int NUM = 100;       //要排序的数目
 10 int NUM_PER_LINE = 7;//每行输出多少个数
 11 void insertion_sort(int *,int ,int);
 12 void quickSort(int *p ,int start,int end);
 13 void bobbleSort(int *p ,int start,int end);
 14 void selectSort(int *p ,int start ,int end);
 15 int * makeRandom();//产生随机数组
 16 void printUseTime(int*,int ,int ,int);//打印用的时间
 17 void print(int *);//打印原数组
 18 void importNUM();//输入要排序的个数
 19 void chooseMode();//选择要用哪种排序
 20 int main()
 21 {
 22     importNUM();             //输入要排序的个数
 23     chooseMode();            //选择要用哪种排序
 24     return 0;
 25 } 
 26 //插入排序
 27 void insertion_sort(int *p,int start,int end)
 28 {
 29     int temp;
 30     int i,j;
 31     for (i =start+1; i < end; i++)
 32     {
 33         j = i-1;
 34         temp = p[i];
 35         while ( j >=start && p[j] > temp)
 36         {
 37             p[j+1] = p[j];
 38             j--;
 39         }
 40          p[j+1] = temp;
 41     }
 42 }
 43 //快速排序
 44 void quickSort(int *p ,int start,int end)
 45 {
 46     int i = start , j = end;
 47     int base = p[i];//选取第一个作为基数
 48     int dig = i;//挖的坑
 49     while( i!= j)
 50      {
 51          while (p[j] >= base && j > i)
 52          {
 53              j--;
 54          }
 55          p[dig] = p[j];
 56          dig = j;
 57          while (p[i] <= base && j> i)
 58          {
 59              i++;
 60          }
 61          p[dig] = p[i];
 62          dig = i;
 63     }
 64     p[dig] = base;
 65     if(start < dig-1)
 66         quickSort(p,start,dig-1);
 67     if(dig+1 < end)
 68         quickSort(p,dig+1,end);
 69 }
 70  //冒泡排序
 71 void bobbleSort(int *p ,int start,int end)
 72 {
 73     int temp;
 74     for (int i = start;  i < end-1 ;i++)
 75         for (int j =start; j < end -i-1 ;j++)
 76         {
 77             if (p[j] > p[j+1])
 78             {
 79                 temp = p[j];
 80                 p[j] = p[j+1];
 81                 p[j+1] = temp;
 82             }
 83         }
 84 }
 85 //选择排序
 86 void selectSort(int *p ,int start ,int end)
 87 {
 88     for (int i =start; i < end -1 ;i++)
 89     {
 90         int min = i+1,temp;
 91         for (int j = i+1 ; j < end;j++)
 92         {
 93             if(p[min] > p[j])
 94             {
 95                 min = j;
 96             }
 97         }
 98         if (p[min] < p[i])
 99         {
100             temp = p[i];
101             p[i] = p[min];
102             p[min] = temp;
103         }
104     }
105 }
106 void print(int *p)
107 {
108     int numPerLine = NUM_PER_LINE;
109     for (int i = 0; i < NUM ;i++)
110     {
111         cout<<" "<<setw(8)<<p[i];
112         if(--numPerLine == 0)
113         {
114             cout<<endl;
115             numPerLine += NUM_PER_LINE;
116         }     
117     }
118 }
119 int * makeRandom()
120 {
121     srand(unsigned(time(0)));//做种子
122      int *p = new int[NUM];
123     for (int i = 0; i < NUM; i++)
124      {
125          p[i] = (int)rand();
126     }
127     return p;
128 }
129 void printUseTime(int*p,int start ,int end ,int mode)
130 {
131     int *v = new int[NUM];
132     for (int i = 0; i < NUM; i++)
133         v[i] = p[i];
134     switch (mode)
135     {
136         case 0:
137         {
138             double formerTime = clock();
139             insertion_sort(v,start,end);
140             cout<<"插入排序共用时"<<clock() - formerTime<<"毫秒\n";
141             break;
142         }
143         case 1:
144         {
145             double formerTime = clock();
146             quickSort(v,start,end);
147             cout<<"快速排序共用时"<<clock() - formerTime<<"毫秒\n";
148             break;
149         }
150         case 2:
151         {
152             double formerTime = clock();
153             bobbleSort(v,start,end);
154             cout<<"冒泡排序共用时"<<clock() - formerTime<<"毫秒\n";
155             break;
156         }
157         case 3:
158         {
159             double formerTime = clock();
160             selectSort(v,start,end);
161             cout<<"选择排序共用时"<<clock() - formerTime<<"毫秒\n";
162         }
163     default:
164         break;
165     }
166 //delete [] v;
167 }
168 void importNUM()
169 {
170     cout<<"请输入要排序的个数\n";
171     cin>>NUM;
172 }
173 void chooseMode()//选择要用哪种排序
174 {
175     int * p = makeRandom();//产生随机数组
176     int switch_on;
177     cout<<"请输入要选择哪种排序?\n";
178     cout<<"0.插入排序\n";
179     cout<<"1.快速排序\n";
180     cout<<"2.冒泡排序\n";
181     cout<<"3.选择排序\n";
182     cout<<"4.全都排一遍\n";
183     cin>>switch_on;
184     if(switch_on == 4)
185         for (int i = 0 ;i < 4; i++)
186             printUseTime(p,0,NUM,i);
187     else
188         printUseTime(p,0,NUM,switch_on);
189     delete []p;
190 }

 

posted on 2013-10-02 21:02  雪落尘  阅读(217)  评论(0)    收藏  举报