排序算法之选择排序

 

题目传送门

 1 /*  2  用zstu3539题目来验证算法的正确性  3 */  4 #include <cstdio>  5 #include <iostream>  6 #include <algorithm>  7 #include <ctime>  8 #include <cstdlib>  9 using namespace std; 10 11 const int maxn = 1000000 + 10; 12 const int INF = 0x3f3f3f3f; 13 int a[maxn]; 14 15 void SelectSort(int *a, int n) 16 { 17 for (int i=1; i<=n; ++i) 18  { 19 int mn = a[i]; int k = i; 20 for (int j=i+1; j<=n; ++j) 21  { 22 if (mn > a[j]) 23  { 24 mn = a[j]; 25 k = j; 26  } 27  } 28 if (mn != a[i]) 29  swap (a[i], a[k]); 30  } 31 } 32 33 void SelectSort_2(int *a, int n) //每次分配最大值和最小值,还有bug 34 { 35 for (int i=1; i<=n/2+1; ++i) 36  { 37 int mn_id = i, mx_id = n - i + 1; 38 for (int j=i+1; j<=n-i; ++j) 39  { 40 if (a[j] > a[mx_id]) 41  { 42 mx_id = j; continue; 43  } 44 if (a[j] < a[mn_id]) mn_id = j; 45  } 46  swap (a[i], a[mn_id]); 47 swap (a[n-i+1], a[mx_id]); 48  } 49 } 50 51 int main(void) 52 { 53 //freopen ("rand_small.in", "r", stdin); 54 int n; 55 56 while (scanf ("%d", &n) != EOF) 57  { 58 if (n == 0) 59 continue; 60 for (int i=1; i<=n; ++i) 61  { 62 scanf ("%d", &a[i]); 63  } 64 65  SelectSort (a, n); 66 //SelectSort_2 (a, n); 67 68 bool flag = true; 69 for (int i=1; i<=n; ++i) 70  { 71 if (flag) 72  { 73 printf ("%d", a[i]); 74 flag = false; 75  } 76 else 77 printf (" %d", a[i]); 78  } 79 puts (""); 80  } 81 82 return 0; 83 }

 

你可能感兴趣的:(选择排序)