- //选择排序:
-
将第一次排序过程中的第一个数字和最小数字进行位置互换;
-
//而第二次排序过程中将第二个数字和剩下的最小数字进行位置互换
-
//既:该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。
-
//第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。
#include <stdio.h>
main(){
int i,j,sweizhi,max;
int a[10];
printf("为数组元素赋值:\n");
for(int i=0;i<10;i++){
printf("a[%d]=",i); //为数组赋值
scanf("%d",&a[i]);
}
// 排序
for(int i=0;i<9;i++){
max=a[i]; //排序中元素的最大值
sweizhi=i;
for( j=i+1;j<10;j++){ //循环嵌套i+1到9
if(a[j]>max){
max=a[j];
sweizhi=j;
}
}
a[sweizhi]=a[i]; //交换元素的值
a[i]=max;
}
// 输出数组
for(int i=0;i<10;i++){
printf("%d\t",a[i]);
}
}
冒泡排序
- //冒泡法的基本思路是,如果要对 n 个数进行冒泡排序,那么要进行 n-1 趟比较,
- //在第 1 趟比较中要进行 n-j 次两两比较,在第 j 趟比较中要进行 n-j 次两两比较。
#include <stdio.h>
int main()
{
int i,j,temp,a[11]; //定义变量及数组为基本整型
printf("请输入10个数:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //从键盘中输入10个数
for(i=1;i<10;i++) //变量i代表比较的趟数
for(j=1;j<11-i;j++) //变最j代表每趟两两比较的次数 //或者 for(j=9;j>=ij;j--)
if(a[j]>a[j+1])
{
temp=a[j]; //产利用中间变童实现两值互换
a[j]=a[j+1];
a[j+1]=temp;
}
printf("排序后的顺序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //将胃泡排序后的顺序输出
printf("\n");
return 0;
}
交换排序
- //选择排序是从待排序的区间中经过选择和交换后选出最小的数值存放到 a[0] 中,
- //再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到 a[1] 中,
- //a[1] 中的数字仅大于 a[0],依此类推,
#include <stdio.h>
main()
{
int i,j,temp,a[11]; //定义变量及数组为基本整型
printf("请输入10个数:\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]); //从键盘中输入要排序的10个数字
for(i=1;i<=9;i++)
for (j=i+1;j<=10;j++)
if(a[i]>a[j]) //如果前一个数比后一个数大,则利用中间变量t实现两值互换
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
printf("排序后的顺序是:\n");
for(i=1;i<=10;i++)
printf("%3d", a[i]); //输出排序后的数组
printf("\n");
return 0;
}