选择排序

概念

选择排序:从排序的记录中选择出关键字最小的记录,顺序放在已排好的子文件的后面

常用的方法

直接选择法 、 堆排序

直接排序的思想:n 个记录的文件的直接选择排序需要经过n-1次直接排序所得出结果

void SelectSort(int *arr, int len)

{

    int i,j;        // 为循环做准

    int iMin;        // 存储每次最小值

    int temp;        // 作为临时存储值

    for (i=0; i<len-1; i++)        // 进行len-1趟比较即可

    {

        iMin = i;                // 存储每次最小值

        for (j=i+1; j<len; j++)    // 第i次需要与之比较的数据

        {

            if (arr[iMin]>arr[j])

            {

                iMin = j;        // 记录最小值的位置

            }

        }

        temp = arr[i];            // 交换

        arr[i] = arr[iMin];

        arr[iMin] = temp;

    }

}

直接排序的核心:确定待排序的的数据  、确定比较的数据、找出最小值、进行交换

直接排序的算法性能分析

直接选择排序和直接插入排序类似,都分为无序区、有序区、 区别:直接插入排序是将无序区的第一个元素直接插入到有序区;直接选择排序 把最小的元素放到最后

例子

void Selectsort(int a[], int n)
{
    int i, j, nMinIndex;
    for (i = 0; i < n; i++)
    {
        nMinIndex = i; //找最小元素的位置
        for (j = i + 1; j < n; j++)
            if (a[j] < a[nMinIndex])
                nMinIndex = j;
 
        Swap(a[i], a[nMinIndex]); //将这个元素放到无序区的开头
    }
}

 

上一篇:用canvas 画一个水位波纹上升下降的进度球


下一篇:上机练习五