日期 :2023-11-13
一:通过引用交换最小值和最大值问题及选择排序法来解析循环标记法在数组中的使用情况
(1)对于交换最小值和最大值问题:
在实现最小值和第一个数交换和最大值和最后一个数交换的情况下,对于输入的一系列不限个数的整数,需要引用数组对于这些元素进行储存并按照输入顺序进行排序。
(2)对于选择排序法:
在实现遍历数组中全部元素,然后将最小值(或最大值)与第一位元素进行交换位置的情况下,并可实现特定次数的交换,对于储存这些元素,引入数组,并对其简单排序,然后在不断地交换位置下实现升序排序(或降序排序)
(3)同时可以通过引用函数,实现简单的插入排序
二:程序设计思路:
程序一:实现最小值和最大值的交换(注意先实现最小值交换后实现最大值交换0)
(1)通过数组导入一系列元素
(2)将数组导入的第一个元素作为标记,同时将其同后面所有元素依次进行比较,取其中的最小值。因为要实现数组元素的交换,所以不能直接进行赋值,而是引入变量c,对于c赋值a,再对a赋值b,最后对b赋值c
(3)实现最大值的思路与最小值一样,只是需要注意二者的顺序性,不可对一个数组进行最大值和最小值的同时交换,会导致排序出错。
#include<stdio.h>
int main()
{
int s[10];
int a,max,min;
int temp1,temp2;
int i,j,k;
max=0,min=0;
scanf("%d",&a);
for(i=0;i<a;i++)
{
scanf("%d",&s[i]);
}
for(j=0;j<a;j++)
{
if(s[j]<s[min])
{
min=j;
}
}
temp1=s[0];
s[0]=s[min];
s[min]=temp1;
for(k=0;k<a;k++)
{
if(s[k]>s[max])
{
max=k;
}
}
temp2=s[a-1];
s[a-1]=s[max];
s[max]=temp2;
for(i=0;i<a;i++)
{
printf("%d ",s[i]);
}
return 0;
}
程序二:选择排序法(特定重整次数)
(1)选择排序法的基本思路同循环标记法一致,仍是取首位元素同其他所有数组的元素进行比较实现升序排列,同时可通过输入n次控制循环次数来满足特定重整次数的需求。
(2)选择排序法的特点在于其顺序性,对于依次将最小值同相对第一位数字进行交换的需求,在for内循环中只需对for外循环设定的值,取其后面的元素中的最小值与之交换,其中也同样应用了abc换数的思路。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n;
int s[10];
int i, j, t, temp;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &s[i]);
}
for (j = 0; j < n-1; j++)
{
t = j;
for (i = j + 1; i < n; i++)
{
if (s[i] > s[t])
{
t = i;
}
}
temp = s[t];
s[t] = s[j];
s[j] = temp;
}
printf("%d",s[0]);
for (i =1; i < n; i++)
{
printf(" %d", s[i]);
}
return 0;
}