排序-多语言
目录
C 语言实现
方法 1: 选择排序
方法 2: 冒泡排序
方法 3: 插入排序
方法 4: 快速排序
Python 实现
Java 实现
Js 实现
示例输入输出
题目:对10个数进行排序。
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。
C 语言实现
方法 1: 选择排序
#include <stdio.h>
#define N 10 // 定义常量 N 为 10
int main() {
int i, j, a[N], temp;
// 输入 10 个数字
printf("请输入 10 个数字:\n");
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
// 选择排序
for (i = 0; i < N - 1; i++) {
int min = i; // 假设当前索引 i 是最小值的索引
for (j = i + 1; j < N; j++) {
if (a[min] > a[j]) {
min = j; // 找到更小的值的索引
}
}
// 如果找到的最小值索引不是 i,则交换
if (min != i) {
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
// 输出排序结果
printf("排序结果是:\n");
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
代码说明:
- 输入部分:程序首先提示用户输入 10 个数字,并将其存储在数组
a
中。 - 选择排序:使用选择排序算法对数组进行排序。外层循环遍历数组的每个元素,内层循环找到当前未排序部分的最小值,并将其与当前元素交换。
- 输出部分:最后,程序打印排序后的数组。
使用方法:
- 将代码复制到 C 语言编译器中。
- 编译并运行程序。
- 输入 10 个整数,程序将输出排序后的结果。
方法 2: 冒泡排序
#include <stdio.h>
#define N 10 // 定义常量 N 为 10
int main() {
int i, j, a[N], temp;
// 输入 10 个数字
printf("请输入 10 个数字:\n");
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
// 冒泡排序
for (i = 0; i < N - 1; i++) {
for (j = 0; j < N - 1 - i; j++) {
if (a[j] > a[j + 1]) {
// 交换
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
// 输出排序结果
printf("排序结果是:\n");
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
方法 3: 插入排序
#include <stdio.h>
#define N 10 // 定义常量 N 为 10
int main() {
int i, j, a[N], key;
// 输入 10 个数字
printf("请输入 10 个数字:\n");
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
// 插入排序
for (i = 1; i < N; i++) {
key = a[i];
j = i - 1;
// 将大于 key 的元素移动到前面
while (j >= 0 && a[j] > key) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = key; // 插入 key
}
// 输出排序结果
printf("排序结果是:\n");
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
方法 4: 快速排序
#include <stdio.h>
#define N 10 // 定义常量 N 为 10
// 快速排序的分区函数
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 选择最后一个元素作为基准
int i = (low - 1); // 小于基准的元素的索引
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
// 交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准元素放到正确的位置
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return (i + 1);
}
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 获取分区索引
quickSort(arr, low, pi - 1); // 递归排序左半部分
quickSort(arr, pi + 1, high); // 递归排序右半部分
}
}
int main() {
int a[N];
// 输入 10 个数字
printf("请输入 10 个数字:\n");
for (int i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
// 调用快速排序
quickSort(a, 0, N - 1);
// 输出排序结果
printf("排序结果是:\n");
for (int i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
Python 实现
该程序将输入 10 个数字并对其进行排序,然后输出排序结果。
# 定义常量 N 为 10
N = 10
# 输入 10 个数字
a = []
print("请输入 10 个数字:")
for i in range(N):
num = int(input())
a.append(num)
# 选择排序
for i in range(N - 1):
min_index = i # 假设当前索引 i 是最小值的索引
for j in range(i + 1, N):
if a[min_index] > a[j]:
min_index = j # 找到更小的值的索引
# 如果找到的最小值索引不是 i,则交换
if min_index != i:
a[min_index], a[i] = a[i], a[min_index] # 交换
# 输出排序结果
print("排序结果是:")
for num in a:
print(num, end=' ')
print() # 换行
- 输入部分:使用
input()
函数读取用户输入的 10 个数字,并将其存储在列表a
中。 - 选择排序:与 C 语言中的选择排序逻辑相同,使用嵌套循环找到最小值并进行交换。
- 输出部分:使用
print()
函数输出排序后的结果。
Java 实现
该程序将输入 10 个数字并对其进行排序,然后输出排序结果。
import java.util.Scanner;
public class SelectionSort {
public static void main(String[] args) {
final int N = 10; // 定义常量 N 为 10
int[] a = new int[N]; // 创建数组
// 输入 10 个数字
Scanner scanner = new Scanner(System.in);
System.out.println("请输入 10 个数字:");
for (int i = 0; i < N; i++) {
a[i] = scanner.nextInt();
}
// 选择排序
for (int i = 0; i < N - 1; i++) {
int minIndex = i; // 假设当前索引 i 是最小值的索引
for (int j = i + 1; j < N; j++) {
if (a[minIndex] > a[j]) {
minIndex = j; // 找到更小的值的索引
}
}
// 如果找到的最小值索引不是 i,则交换
if (minIndex != i) {
int temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;
}
}
// 输出排序结果
System.out.println("排序结果是:");
for (int i = 0; i < N; i++) {
System.out.print(a[i] + " ");
}
System.out.println(); // 换行
scanner.close(); // 关闭扫描器
}
}
- 输入部分:使用
Scanner
类读取用户输入的 10 个数字,并将其存储在数组a
中。 - 选择排序:与 C 语言中的选择排序逻辑相同,使用嵌套循环找到最小值并进行交换。
- 输出部分:使用
System.out.print()
输出排序后的结果。
Js 实现
该程序将输入 10 个数字并对其进行排序,然后输出排序结果。
// 定义常量 N 为 10
const N = 10;
let a = [];
// 输入 10 个数字
console.log("请输入 10 个数字:");
for (let i = 0; i < N; i++) {
const num = parseInt(prompt(`输入第 ${i + 1} 个数字:`)); // 使用 prompt 获取用户输入
a.push(num); // 将输入的数字添加到数组中
}
// 选择排序
for (let i = 0; i < N - 1; i++) {
let minIndex = i; // 假设当前索引 i 是最小值的索引
for (let j = i + 1; j < N; j++) {
if (a[minIndex] > a[j]) {
minIndex = j; // 找到更小的值的索引
}
}
// 如果找到的最小值索引不是 i,则交换
if (minIndex !== i) {
let temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;
}
}
// 输出排序结果
console.log("排序结果是:");
console.log(a.join(" ")); // 使用 join 方法将数组转换为字符串并输出
- 输入部分:使用
prompt
函数获取用户输入的 10 个数字,并将其存储在数组a
中。请注意,prompt
函数在浏览器环境中有效。 - 选择排序:与 C 语言中的选择排序逻辑相同,使用嵌套循环找到最小值并进行交换。
- 输出部分:使用
console.log()
输出排序后的结果。
示例输入输出
请输入 10 个数字:
输入第 1 个数字: 34
输入第 2 个数字: 12
输入第 3 个数字: 5
输入第 4 个数字: 67
输入第 5 个数字: 23
输入第 6 个数字: 89
输入第 7 个数字: 1
输入第 8 个数字: 45
输入第 9 个数字: 78
输入第 10 个数字: 3
排序结果是:
1 3 5 12 23 34 45 67 78 89