选择排序
1 /* 数组实战 */ 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<time.h> 6 7 void main() 8 { 9 // 越界不一定出错,不越界一定不会发生内存访问冲突 10 int a[5]={1,2,3,4,5}; 11 for (int i=0;i<10;i++) 12 { 13 printf("%d",a[i]); 14 } 15 16 17 system("pause"); 18 } 19 20 //------------------------------------------------------------------- 21 22 void main() 23 { 24 int a[10]={10,9,8,7,6,5,4,3,2,1}; 25 for (int i=9;i>=0;i--)// 逆序输出 26 { 27 printf("\n%d",a[i]); 28 } 29 30 31 system("pause"); 32 } 33 34 //------------------------------------------------------------------- 35 36 // 查找数据是否存在数组 37 38 void main() 39 { 40 time_t ts; 41 unsigned int data = time(&ts); 42 srand(data);// 创建随机数种子 43 int a[100]; 44 for (int i=0;i<100;i++) 45 { 46 a[i]= rand()%300;// 创建随机数组 47 printf("\n%d",a[i]); 48 } 49 50 int num; 51 int flag=0;// 假定找不到 52 scanf("%d",&num); 53 for (int i=0;i<100;i++) 54 { 55 if(num==a[i]) 56 { 57 flag=1;// 找到 58 break; 59 } 60 } 61 62 if (flag) 63 { 64 printf("找到"); 65 } 66 else 67 { 68 printf("找不到"); 69 } 70 71 system("pause"); 72 } 73 74 //------------------------------------------------------------------- 75 76 // 选择法取随机数组的极值 77 void main() 78 { 79 time_t ts; 80 unsigned int data = time(&ts); 81 srand(data);// 创建随机数种子 82 int a[20]; 83 for (int i=0;i<20;i++) 84 { 85 a[i]= rand()%300;// 创建随机数组 86 printf("\n%d",a[i]); 87 } 88 89 int max=a[0];// 选择法 取最大 90 for (int i=1;i<20;i++) 91 { 92 if(a[i]>max) 93 { 94 max = a[i]; 95 } 96 } 97 printf("\n%d",max); 98 99 100 int min=a[0];// 选择法 取最小 101 for (int i=1;i<20;i++) 102 { 103 if(a[i]<min) 104 { 105 min = a[i]; 106 } 107 } 108 printf("\n%d",min); 109 110 111 system("pause"); 112 } 113 114 //------------------------------------------------------------------- 115 116 // 选择排序 117 118 #define N 20 119 void main() 120 { 121 time_t ts; 122 unsigned int data = time(&ts); 123 srand(data);// 创建随机数种子 124 int a[N]; 125 for (int i=0;i<N;i++) 126 { 127 a[i]= rand()%300;// 创建随机数组 128 printf("\n%d",a[i]); 129 } 130 131 int kmax = 0;// 记录最值下标 132 for (int i=0;i<N-1;i++ ) 133 { 134 kmax=i;// 记录最大数的下标 135 for(int j=i+1;j<N;j++)// 遍历剩下的数 136 { 137 if(a[j] > a[kmax]) 138 { 139 kmax = j;// 循环记录最大值得下标 140 } 141 } 142 143 if (kmax != i) 144 { 145 int temp = a[kmax];// 当i=0,最大值移到a[0],把当前的最大之移到第一位 146 a[kmax] = a[i]; 147 a[i] = temp; 148 } 149 } 150 151 152 153 printf("排序以后:\n"); 154 155 for (int i=0;i<N;i++) 156 { 157 printf(" %d ",a[i]); 158 } 159 160 printf("\n"); 161 162 163 system("pause"); 164 }
思想:
还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。
长风破浪会有时,直挂云帆济沧海
posted on 2015-06-20 09:46 Dragon-wuxl 阅读(189) 评论(0) 收藏 举报
浙公网安备 33010602011771号