用选择法对十个整数排序 这十个整数没有要求 随便十个整数都行 编写个程序
//选择排序
#include<stdio.h>
#include<stdlib.h>
int n;//设置全局变量n存数组长度,即多少个数遍历
void swap(int arr[], int* a, int* b) {//数组俩元素交换
int c=0;
c = arr[*a];
arr[*a] = arr[*b];
arr[*b] = c;
}
void printArray(int arr[]) {//遍历输出数组
int i = 0;
for (i = 0;i < n;i++) {
printf("%d ", arr[i]);
}
}
int main() {
int array[10];//自定义要比较的元素个数
int i = 0;
int j, k;
int index;//index存最小元素下标
n=sizeof(array)/sizeof(array[0]);//获取数组长度
printf("%d个随机数排序!原数组为: \n\n",n);
while (i < n) {//数组初始化赋值
//scanf("%d",&array[i]);
array[i] = rand() % 100 + 1;//0-99随机数
i++;
}
printArray(array);//输出原数组
//数组赋值完毕时 i=n-1; 10个数i为9
for (j = 0;j <i-1;j++) //例如:10个数外层循环9次 , j从0取到8
{
//初始化index 为j,外循环一次变一次
index =j;
/*内层循环中:
每个k下标数都和index下标数比较一次
第一轮是0下标元素与1~8下标元素逐一比较,比较完成后最小值放0下标处
第二轮是1下标元素 与2~8下标元素逐一比较... 比较完后最小值放1下标处
.
.
.
最后一轮是 7下标元素 与 8下标元素比较...比较完小值放7下标处,最后剩8下标处元素不用比较
第一次循环比较8次,之后比较次数递减
*/
for (k =index+1;k < i ;k++)
{
if (array[index]>array[k])//如果k下标指向数较小,则替换最小下标,即语句index=k;
{
index=k;
}
}
if(j!=index)//如果初始index下标值(即j值)不等于替换后的index下标值,则交换,使index下标指向最小值,最小值放最前边
{
swap(array,&index,&j); //交换
}
}
printf("\n\n选择排序后为: \n\n");
printArray(array);//输出排序后数组
}
我写过一个选择排序法
#include<stdio.h>
void main()
{
int i, j;
char t;
int a[10] = { 1,3,4,2,9,5,7,6,8,0 };
for (i = 0; i < 10 - 1; i++) //选择排序
for (j = i + 1; j < 10; j++)
if (a[i] > a[j])
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
for (i = 0; i < 10; i++) //输出排序后数组
printf("%d", a[i]);
}