用选择法对十个整数排序(C语言)

用选择法对十个整数排序

编译环境VS2017

给定一个数组,用选择法排序,这种思想首先假定数组的首元素为最小(最大)的。此时就要利用3个变量i,j,min(max)表示元素的下标。i表示当前,j表示找到的最小(最大)的下标,min(max)用于存放每次循环中最小(大)值的下标。以找到最小为例:找到最小的下标后赋给max。找到之后判断所假设的当前值是否为此次循环的最小值,如果不是,就交换a[min] 与当前a[i]的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。

核心代码:

int tepm;
	for (int i = 0; i < 10; ++i) {
		int min = i;
		for (int j = i + 1; j < 10; ++j) {//a[i]依次和a[i]之后的元素作比较,记录较小的下标
			if (a[j] < a[min]) {
				min = j;
			}
		}
		//当min等于i时,说明a[i]就是a[i]之后所有元素中最小的
		// min不等于i时说明a[i]不是a[i]之后所有元素中最小的,最小的为a[mid],将他们的值交换
		if (min != i) {
			tepm = a[i];
			a[i] = a[min];
			a[min] = tepm;
		}
	}

具体实现如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void sort(int a[]) {
	int tepm;
	for (int i = 0; i < 10; ++i) {
		int min = i;
		for (int j = i + 1; j < 10; ++j) {//a[i]依次和a[i]之后的元素作比较,记录较小的下标
			if (a[j] < a[min]) {
				min = j;
			}
		}
		//当min等于i时,说明a[i]就是a[i]之后所有元素中最小的
		// min不等于i时说明a[i]不是a[i]之后所有元素中最小的,最小的为a[mid],将他们的值交换
		if (min != i) {
			tepm = a[i];
			a[i] = a[min];
			a[min] = tepm;
		}
	}
	for (int i = 0; i < 10; ++i) {
		printf("%d  ", a[i]);
	}
	printf("\n");
}
void main() {
	int arr[10];
	for (int i = 0; i < 10; ++i) {
		printf("请输入数组arr的第%d个数\n", i + 1);
		scanf("%d", &arr[i]);
		system("cls");
	}
	printf("数组arr为:\n");
	for (int i = 0; i < 10; ++i) {
		printf("%d  ", arr[i]);
	}
	printf("\n");
	sort(arr);
	system("pause");
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41071068/article/details/88878845