0、排序算法_选择排序:
- 概念:每次排序把未排序序列当中的极值找出来放到前面
#include<stdio.h>
#define SZ 5
int main() {
int a[SZ] = { 1,5,4,2,3 };
int i, j, Max, Max_p,tem;
for (i = 0; i <= ((sizeof(a) / sizeof(a[0])) - 2); i++) {
Max = a[i];
Max_p = i;
for (j = i + 1; j <= ((sizeof(a) / sizeof(a[0])) - 1); j++) {
if (a[j] > Max) {
Max_p = j;
Max = a[j];
}
}
tem = a[i];
a[i] = a[Max_p];
a[Max_p] = tem;
printf("第%d轮Max:%d\n", i,Max);
}
printf("===========");
for (i = 0; i < SZ; i++) {
printf("%d ", a[i]);
}
return 0;
}
1、排序算法_冒泡排序:
- 概念:每次排序把未排序序列当中的极值找出来放到前面
#include<stdio.h>
int main(){
int i, j,tem;
for (i = 0; i < SZ - 1; i++) {
for (j = 0; j < SZ-i; j++) {
if (a[j] < a[j + 1]) {
tem = a[j];
a[j] = a[j + 1];
a[j + 1] = tem;
}
}
}
for (i = 0; i < SZ; i++) {
printf("%d ", a[i]);
}
return 0;
}
2、排序算法_插入排序:
- 概念:每次排序把未排序序列当中的极值找出来放到前面
#include<stdio.h>
int main(){
int a[SZ] = { 1,5,4,2,3 };
int i,j, tem;
for (i = 1; i <= SZ - 1; i++) {
tem = a[i];
j = i;
while (j>0) {
if (a[j-1] < a[j]) {
tem = a[j];
a[j] = a[j - 1];
a[j - 1] = tem;
}
j--;
}
}
for (i = 0; i < SZ; i++) {
printf("%d ", a[i]);
}
return 0;
}
3、建立在有序序列基础之上的查找方法:二分法查找
- 思路,设置三个变量分别指向序列的最小值,中间值和最大值,每次循环就判断要查找的数值比中间值大还是比中间值小,移动最小值和最大值的位置,每次都能排除一半留下一半。
总结: