今天对冒泡排序算法和选择排序算法进行复盘,以期查漏补缺
冒泡排序:由小到大版本:
#include <stdio.h>
int main(){
int a[10];//定义容量为10的数组
int i,j,k;//定义循环变量
int temp,n=10;//定义临时变量和n
for(i=0;i<10;i++){
a[i]=-2*i;//通过for循环为数组赋值,这里就是随便赋的
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出原始数组
}
printf("\n");//打印回车
for(j=0;j<n+1;j++){//第j趟比较
for(k=1;k<n-j;k++){//第k次比较
if(a[k-1]>a[k]){//假如前一个大于后一个,则交换两个位置,且一直向后推交换
temp=a[k-1];
a[k-1]=a[k];
a[k]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出数组,由小到大
}
return 0;
}
由大到小版本:
#include <stdio.h>
int main(){
int a[10];//定义容量为10的数组
int i,j,k;//定义循环变量
int temp,n=10;//定义临时变量和n
for(i=0;i<10;i++){
a[i]=2*i;//通过for循环为数组赋值,这里就是随便赋的
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出原始数组
}
printf("\n");//打印回车
for(j=0;j<n+1;j++){//第j趟比较
for(k=1;k<n-j;k++){//第k次比较
if(a[k-1]<a[k]){//假如前一个小于后一个,则交换两个位置,且一直向后推交换
temp=a[k-1];
a[k-1]=a[k];
a[k]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出数组,由大到小
}
return 0;
}
选择排序:由小到大版本:
#include <stdio.h>
int main(){
int a[10];//定义容量为10的数组
int i,j,k;//定义循环变量
int p,temp,flag,n=10;
for(i=0;i<10;i++){
a[i]=-2*i;//通过for循环为数组赋值,这里就是随便赋的
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出原始数组
}
printf("\n");//打印回车
for(j=0;j<n;j++){//第j轮比较
p=j;//开局将p的位置定到需要确定顺序的位置的第一位
flag=0;//每一轮开局重置flag的值为0
for(k=j+1;k<n;k++){//一直向后推
if(a[p]>a[k]){//如果大于,则交换
p=k;
flag=1;//修改flag的值,标志操作
}
if(flag==1){//假如flag为1则证明p的值被修改过,此时进行交换,反之则不需
temp=a[j];
a[j]=a[p];
a[p]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出数组,由小到大
}
return 0;
}
由大到小版本:
#include <stdio.h>
int main(){
int a[10];//定义容量为10的数组
int i,j,k;//定义循环变量
int p,temp,flag,n=10;
for(i=0;i<10;i++){
a[i]=-2*i;//通过for循环为数组赋值,这里就是随便赋的
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出原始数组
}
printf("\n");//打印回车
for(j=0;j<n;j++){//第j轮比较
p=j;//开局将p的位置定到需要确定顺序的位置的第一位
flag=0;//每一轮开局重置flag的值为0
for(k=j+1;k<n;k++){//一直向后推
if(a[p]>a[k]){//如果小于,则交换
p=k;
flag=1;//修改flag的值,标志操作
}
if(flag==1){//假如flag为1则证明p的值被修改过,此时进行交换,反之则不需
temp=a[j];
a[j]=a[p];
a[p]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%d\t",a[i]);//输出数组,由大到小
}
return 0;
}
以上就是所有内容,如有错误或不足,欢迎大家不吝赐教。