【算法篇】选择排序

发布于:2025-02-10 ⋅ 阅读:(30) ⋅ 点赞:(0)

 

前言

选择排序是一种经典的排序算法,广泛应用于基础编程学习中。它通过不断选择未排序部分中的最小元素,并与当前排序部分的第一个元素交换,最终完成整个数组的排序。虽然它的时间复杂度为 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);

选择排序是一种直观且容易实现的算法,尽管在效率上不如快速排序或归并排序,但它在小规模数据集中的表现仍然可圈可点。通过本篇文章的示例代码,你可以清楚地看到选择排序在不同编程语言中的实现方式。👨‍💻

🚀 点赞、收藏、关注 如果你觉得本文内容对你有帮助,别忘了点赞哦!也欢迎收藏这篇文章,分享给你的朋友们!若你希望了解更多编程技巧和算法实现,记得关注我,获取更多精彩内容!❤️


网站公告

今日签到

点亮在社区的每一天
去签到