c实现选择排序法

#include <stdio.h>

void printArr(int arr[],int len);
int main()
{
    int arr[] = { 1,3,5,7,2,4,6,8,9,0 };
    //int arr[] = { 1,1,1,3,3,5,5,2,4,7,7,7,6,6,8,9,0 };//也是可以排序的
    int len = sizeof(arr) / sizeof(int);
    printArr(arr, len);
    //选择排序法
    //实现原理 数组中先找出最小的,将其排在数组第一位 在余下的数中再找最小的 将其排在数组第二位
    for (int i = 0; i < len - 1; i++)
    {
        int min = i;
        for (int j = i+1; j < len; j++)
        {
            if (arr[min] > arr[j])
            {
                min = j;
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
     }
    printArr(arr, len);
    //优化一下 不需要每次比较就交换两个数 而是比较完一轮后 将最小的和arr[i]交换
    for (int i = 0; i < len - 1; i++)
    {
        int min = i;
        for (int j = i+1; j < len; j++)
        {
            int flag = min;//作为判断的标志
            if (arr[flag] > arr[j])
            {
                flag = j;
            }
            if (flag != min)
            {
                int temp = arr[flag];
                arr[j] = arr[min];
                arr[min] = temp;
            }
        }
    }
    printArr(arr, len);
    system("pause");
    return 0;
}
void printArr(int arr[],int len)
{
    for (int i = 0; i < len; i++)
    {
        printf("%d", arr[i]);
    }
    printf("\n");
}

猜你喜欢

转载自www.cnblogs.com/littlelittleprince/p/12296746.html