葡京娱乐开元棋牌_开元棋牌靠谱吗_f1娱乐开元棋牌先锋网 葡京娱乐开元棋牌_开元棋牌靠谱吗_f1娱乐开元棋牌片段及技术文章聚合

选择排序

选择排序

  • 初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列。
  • 再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。
  • 以此类推,直到所有元素均排序完毕。

注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。

//选择排序
#include 
#include 
using namespace std;

void swap(int *arr, int i, int j)
{
    if(arr[i] != arr[j])
    {
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }
}

void selectSort(int *arr)
{
    int minIndex = 0;
    for(int i = 0; i < 9; i++)
    {
        minIndex = i;
        for(int j = i+1; j < 10; j++)
        {
            if(arr[minIndex] > arr[j])
            {
                minIndex = j;
            }
        }
        swap(arr, i, minIndex);
    }
}

void printArr(int *arr)
{
    for(int i = 0; i < 9; i++)
        cout << arr[i] << " ";
    cout << arr[9] << endl;
}
int main()
{
    //产生10个随机数的数组
    int arr[10] = {0};
    //1.产生随机数种子
    srand((unsigned)time(NULL));
    //2.产生10个随机数
    for(int i = 0; i < 10; i++)
    {
        arr[i] = rand()%100;
    }
    //3.打印排序前的这10个数
    cout << "排序前数组为: ";
    printArr(arr);
    selectSort(arr);
    cout << "排序完成后数组为: ";
    printArr(arr);
    system("pause");
    return 0;
}

原文地址:选择排序