排序算法之直接选择排序

简介: 直接选择排序     直接选择排序是将整个待排序序列分为两部分,一部分为有序(最开始有序序列为空),一部分为无序(最终无序序列为空)。有序序列中的数都不大于无序序列中的数。它的过程是每次都在无序中寻找一个最小的数,然后将其与无序序列的第一个数交换,并并入有序序列。则有序序列长度增1,无序序列长度减1。      比如:对R[0….n]数组进行选择排序。其中R[0…i]为

直接选择排序

     直接选择排序是将整个待排序序列分为两部分,一部分为有序(最开始有序序列为空),一部分为无序(最终无序序列为空)。有序序列中的数都不大于无序序列中的数。它的过程是每次都在无序中寻找一个最小的数,然后将其与无序序列的第一个数交换,并并入有序序列。则有序序列长度增1,无序序列长度减1。
     比如:对R[0….n]数组进行选择排序。其中R[0…i]为有序,R[i+1…n]为无序,且R[0…i]中的每一个数都不大于R[i+1…n]中的数。
     在R[i+1…n]中选择一个最小的数R[k],交换R[i+1]与R[k],将R[i+1]并入有序序列。则现在的有序序列为R[0…i+1],无序序列为R[i+2…n],重复进行这样的操作,直到无序序列为空。

typedef int datatype;
int SelectionSort(datatype *array, int size)
{
    int i, j, k;

    if(array == NULL) {
        return -1;
    }

    for(i = 0; i < size; i++) {
    //k中存着无序序列中最小值的下标
        k = i;
        for(j = i+1; j < size; j++) {
        //如果无序序列中有数比最小值还小,则改变k的值
            if(array[k] > array[j]) {
                k = j;
            }
        }
        Swap(array+i, array+k);
    }

    return 0;
}

void Swap(datatype *a, datatype *b)
{
    int temp;

    temp = *a;
    *a = *b;
    *b = temp;
}
目录
相关文章
|
4月前
|
搜索推荐 算法 C语言
C语言选择排序算法,从入门到精通只需1秒!
C语言选择排序算法,从入门到精通只需1秒!
|
1月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
3月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
3月前
|
搜索推荐
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码
|
3月前
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
27 4
|
3月前
|
搜索推荐 算法
【C/排序算法】:堆排序和选择排序
【C/排序算法】:堆排序和选择排序
24 0
|
3月前
|
算法 搜索推荐 Java
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
27 0
|
3月前
|
存储 算法 C语言
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
29 0
|
4月前
|
存储 算法 搜索推荐
【数据结构与算法】:选择排序与快速排序
欢迎来到排序的第二个部分:选择排序与快速排序!
【数据结构与算法】:选择排序与快速排序
|
4月前
|
机器学习/深度学习 搜索推荐 算法
【排序算法】插入排序与选择排序详解
【排序算法】插入排序与选择排序详解