前言
选择排序是一种经典的排序算法,广泛应用于基础编程学习中。它通过不断选择未排序部分中的最小元素,并与当前排序部分的第一个元素交换,最终完成整个数组的排序。虽然它的时间复杂度为 O(n²),在处理大规模数据时效率较低,但它简单易懂,适合入门学习。💡
本文将通过不同编程语言(C++、C、Java、Python、JavaScript)实现选择排序算法,为你展示如何在不同的环境中实现这一基础排序算法。🎉每种语言的代码实现都呈现了选择排序的核心思想,并为读者提供了多样化的参考。
选择排序是一种基于比较的排序算法。它通过反复从未排序部分中选择最小(或最大)元素,并将其与第一个未排序元素交换来对数组进行排序。这个过程一直持续,直到整个数组排序完成。
首先,我们找到最小的元素并将其与第一个元素交换。这样,最小元素就被放置在正确的位置。 然后,我们在剩余的元素中找到最小的元素(或第二小的元素),并将其与第二个元素交换。 我们继续这样做,直到所有元素都移动到正确的位置。
下面来看看不同语言的代码实现:
C++代码
// C++ 程序实现选择排序
#include <bits/stdc++.h> // 引入头文件,包含常用的库
using namespace std; // 使用标准命名空间
// 选择排序函数
void selectionSort(vector<int> &arr) {
int n = arr.size(); // 获取数组的大小
// 外层循环,从数组的第一个元素开始
for (int i = 0; i < n - 1; ++i) {
// 假设当前位置包含最小元素
int min_idx = i;
// 内层循环遍历未排序部分,寻找实际的最小值
for (int j = i + 1; j < n; ++j) {
// 如果当前元素比最小值还小
if (arr[j] < arr[min_idx]) {
// 如果找到更小的元素,更新 min_idx
min_idx = j;
}
}
// 将找到的最小元素交换到正确位置
swap(arr[i], arr[min_idx]);
}
}
// 打印数组函数
void printArray(vector<int> &arr) {
for (int &val : arr) { // 遍历数组
cout << val << " "; // 打印数组元素
}
cout << endl; // 换行
}
// 主函数
int main() {
// 初始化一个数组
vector<int> arr = {64, 25, 12, 22, 11};
// 打印原始数组
cout << "Original array: ";
printArray(arr);
// 调用选择排序函数对数组进行排序
selectionSort(arr);
// 打印排序后的数组
cout << "Sorted array: ";
printArray(arr);
return 0; // 程序结束
}
C语言代码
// C 程序实现选择排序
#include <stdio.h> // 引入标准输入输出头文件
// 选择排序函数
void selectionSort(int arr[], int n) {
// 外层循环,遍历数组的每一个元素
for (int i = 0; i < n - 1; i++) {
// 假设当前位置包含最小元素
int min_idx = i;
// 内层循环遍历未排序部分,寻找实际的最小值
for (int j = i + 1; j < n; j++) {
// 如果当前元素比最小值还小
if (arr[j] < arr[min_idx]) {
// 如果找到更小的元素,更新 min_idx
min_idx = j;
}
}
// 将找到的最小元素交换到正确的位置
int temp = arr[i]; // 暂存当前元素
arr[i] = arr[min_idx]; // 将最小元素放到当前位置
arr[min_idx] = temp; // 将当前位置的元素放到最小元素的位置
}
}
// 打印数组的函数
void printArray(int arr[], int n) {
// 遍历数组并打印每个元素
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 打印数组元素
}
printf("\n"); // 打印换行
}
// 主函数
int main() {
// 初始化数组
int arr[] = {64, 25, 12, 22, 11};
// 计算数组的元素个数
int n = sizeof(arr) / sizeof(arr[0]);
// 打印原始数组
printf("Original array: ");
printArray(arr, n);
// 调用选择排序函数排序数组
selectionSort(arr, n);
// 打印排序后的数组
printf("Sorted array: ");
printArray(arr, n);
return 0; // 程序正常结束
}
Java代码
// Java 程序实现选择排序
import java.util.Arrays; // 导入数组工具类,用于处理数组相关的操作
class GfG {
// 选择排序算法
static void selectionSort(int[] arr){
int n = arr.length; // 获取数组的长度
// 外层循环,遍历数组的每个元素
for (int i = 0; i < n - 1; i++) {
// 假设当前位置包含最小元素
int min_idx = i;
// 内层循环遍历未排序部分,寻找实际的最小值
for (int j = i + 1; j < n; j++) {
// 如果当前元素比已知最小值还小
if (arr[j] < arr[min_idx]) {
// 更新 min_idx 为更小的元素的位置
min_idx = j;
}
}
// 将找到的最小元素交换到正确的位置
int temp = arr[i]; // 暂存当前位置的元素
arr[i] = arr[min_idx]; // 将最小元素放到当前位置
arr[min_idx] = temp; // 将当前位置的元素放到最小元素的位置
}
}
// 打印数组的函数
static void printArray(int[] arr){
// 遍历数组并打印每个元素
for (int val : arr) {
System.out.print(val + " "); // 打印数组元素
}
System.out.println(); // 打印换行
}
// 主函数
public static void main(String[] args){
int[] arr = { 64, 25, 12, 22, 11 }; // 初始化数组
// 打印原始数组
System.out.print("Original array: ");
printArray(arr);
// 调用选择排序算法对数组进行排序
selectionSort(arr);
// 打印排序后的数组
System.out.print("Sorted array: ");
printArray(arr);
}
}
python的代码
# Python 程序实现选择排序
# 选择排序函数
def selection_sort(arr):
n = len(arr) # 获取数组的长度
# 外层循环,遍历数组的每个元素
for i in range(n - 1):
# 假设当前位置包含最小元素
min_idx = i
# 内层循环遍历未排序部分,寻找实际的最小值
for j in range(i + 1, n):
# 如果当前元素比已知最小值还小
if arr[j] < arr[min_idx]:
# 如果找到更小的元素,更新 min_idx
min_idx = j
# 将找到的最小元素交换到正确的位置
arr[i], arr[min_idx] = arr[min_idx], arr[i] # 交换位置
# 打印数组的函数
def print_array(arr):
# 遍历数组并打印每个元素
for val in arr:
print(val, end=" ") # 打印数组元素,避免换行
print() # 打印换行
# 主程序
if __name__ == "__main__":
# 初始化数组
arr = [64, 25, 12, 22, 11]
# 打印原始数组
print("Original array: ", end="")
print_array(arr)
# 调用选择排序算法对数组进行排序
selection_sort(arr)
# 打印排序后的数组
print("Sorted array: ", end="")
print_array(arr)
Javascript版代码
// 选择排序算法实现
// 选择排序函数
function selectionSort(arr) {
let n = arr.length; // 获取数组的长度
// 外层循环,遍历数组的每一个元素
for (let i = 0; i < n - 1; i++) {
// 假设当前位置包含最小元素
let min_idx = i;
// 内层循环遍历未排序部分,寻找实际的最小值
for (let j = i + 1; j < n; j++) {
// 如果当前元素比已知最小值还小
if (arr[j] < arr[min_idx]) {
// 如果找到更小的元素,更新 min_idx
min_idx = j;
}
}
// 将找到的最小元素交换到正确的位置
let temp = arr[i]; // 暂存当前位置的元素
arr[i] = arr[min_idx]; // 将最小元素放到当前位置
arr[min_idx] = temp; // 将当前位置的元素放到最小元素的位置
}
}
// 打印数组的函数
function printArray(arr) {
// 遍历数组并打印每个元素
for (let val of arr) {
process.stdout.write(val + " "); // 打印数组元素,避免换行
}
console.log(); // 打印换行
}
// 驱动函数
const arr = [64, 25, 12, 22, 11]; // 初始化数组
console.log("Original array: "); // 打印原始数组
printArray(arr);
selectionSort(arr); // 调用选择排序算法对数组进行排序
console.log("Sorted array: "); // 打印排序后的数组
printArray(arr);
选择排序是一种直观且容易实现的算法,尽管在效率上不如快速排序或归并排序,但它在小规模数据集中的表现仍然可圈可点。通过本篇文章的示例代码,你可以清楚地看到选择排序在不同编程语言中的实现方式。👨💻
🚀 点赞、收藏、关注 如果你觉得本文内容对你有帮助,别忘了点赞哦!也欢迎收藏这篇文章,分享给你的朋友们!若你希望了解更多编程技巧和算法实现,记得关注我,获取更多精彩内容!❤️