【问题标题】:Selection Sort in c++c++中的选择排序
【发布时间】:2018-04-23 19:24:50
【问题描述】:

我正在尝试从该视频中了解选择排序: https://www.youtube.com/watch?v=79AB11J5BqU

这是我当前的代码:

#include <iostream>
int main() {
int numbers[5]={5,3,4,1,2};
int temp;

std::cout<<"BEFORE SORT : \n";
for(int x=0;x<5;x++){
    std::cout<<numbers[x]<<" ";
}

for (int i = 0; i < 5; ++i) {
    for (int j = i+1; j < 5; ++j) {
        if(numbers[j]<numbers[i]){
            temp = numbers[j];
            numbers[j] = numbers[i];
            numbers[i] = temp;
        }
    }
}

std::cout<<"\n\nAFTER SORT : \n";
for(int x=0;x<5;x++){
    std::cout<<numbers[x]<<" ";
}
}

我是否像视频一样进行选择排序? 还是我改为进行冒泡排序?

谢谢

【问题讨论】:

  • 在选择排序中你应该找到最少的元素,然后交换一次。
  • 那么,视频中的解释是不是错了?
  • 致 DOWNVOTER,我可以知道我做错了什么,你认为你需要投反对票吗? :(
  • 作为一个视频评论中的状态,它不是Selection_sort
  • 我会说这是选择排序的一种变体,因为我在维基百科上找不到匹配项。

标签: c++ sorting selection


【解决方案1】:

在选择排序中,您会找到一个最小(或最大)元素并将其放在顶部(底部),然后对列表的其余部分再次重复。

这将是一种选择排序,但您不需要交换您比较的每个数字来找到最小的一个。在每个内部循环中存储最小数字索引,并在循环结束时进行一次交换。

 unsigned minIndex;
 for (int i = 0; i < 5; ++i) {
     minIndex = i;
    for (int j = i + 1; j < 5; ++j) {
        if(numbers[j] < numbers[minIndex]){
            minIndex = j;
        }
    }
    if (minIndex != i) {  //  Do swapping
        temp = numbers[i];
        numbers[i] = numbers[minIndex];
        numbers[minIndex] = temp;
    }
}

【讨论】:

  • Bubble_sort 只交换相邻项目。
  • 确实使用了 j+1 并将最小的数字移动到第一个索引等不使它成为 Selection_sort 吗?如果不是,那么如何正确使用选择排序?
  • @taek 我想说这不是选择排序最常见或最有效的衍生产品。
【解决方案2】:

选择排序算法通过从未排序的部分重复寻找最小元素(考虑升序)并将其放在开头来对数组进行排序。

#include<iostream>
using namespace std;
// Selection Sort//
void Selection_Sort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
    int min_index=i;
    for(int j=i;j<n-1;j++)
    {
        if(a[j]<a[min_index]){
            min_index=j;
    }
    }
    swap(a[i],a[min_index]);

}
}
int main()
{

    int n,key;
    cin>>n;
    int a[1000];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    Selection_Sort(a,n);
     for(int i=0;i<n;i++)
    {
        cout<<a[i];
    }
}

【讨论】:

  • 二级for循环的条件应该是j &lt; n,而不是j &lt; n-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2017-07-28
相关资源
最近更新 更多