Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在循环排序算法中,我在寻找一个我们观察到算法不稳定性质的例子_C++_Algorithm_Sorting - Fatal编程技术网

C++ 在循环排序算法中,我在寻找一个我们观察到算法不稳定性质的例子

C++ 在循环排序算法中,我在寻找一个我们观察到算法不稳定性质的例子,c++,algorithm,sorting,C++,Algorithm,Sorting,我阅读了有关循环排序算法的文章,发现它本质上是不稳定的,然而,我很难提出一个案例来说明循环算法的不稳定本质。 有人能举个例子,让我们观察算法的不稳定性吗 有关算法的更多信息:- 以下是我的循环排序算法代码:- #include <iostream> using namespace std; int main() { int n; cin >> n;

我阅读了有关循环排序算法的文章,发现它本质上是不稳定的,然而,我很难提出一个案例来说明循环算法的不稳定本质。 有人能举个例子,让我们观察算法的不稳定性吗

有关算法的更多信息:-

以下是我的循环排序算法代码:-

        #include <iostream> 

        using namespace std;

        int main()
        {
            int n;
            cin >> n;
            int *arr;
            arr=new int[n];
            for (int i = 0; i < n; i++)
                cin >> arr[i];
            int cyStart, item, pos;
            for (int cyStart = 0; cyStart < (n - 1); cyStart++)
            {
                item = arr[cyStart];
                pos = cyStart;
                for (int i = cyStart + 1; i < n; i++)
                {
                    if (item > arr[i])
                        pos++;
                }
                if (pos == cyStart)
                    continue;
                while (item == arr[pos])
                    pos++;
                if (item != arr[pos])
                    swap(arr[pos], item);
                while (cyStart != pos)
                {
                    pos = cyStart;
                    for (int i = cyStart + 1; i < n; i++)
                    {
                        if (item > arr[i])
                            pos++;
                    }
                    while (item == arr[pos])
                        pos++;   
                    if (item != arr[pos])
                        swap(arr[pos], item);
                }
            }
            for(int i=0;i<n;i++)
                cout << arr[i] << " ";
            return 0;
        }
#包括
使用名称空间std;
int main()
{
int n;
cin>>n;
int*arr;
arr=新整数[n];
对于(int i=0;i>arr[i];
内部零件、项目、位置;
对于(int-cyStart=0;cyStart<(n-1);cyStart++)
{
项目=arr[cyStart];
pos=膀胱术;
对于(int i=cyStart+1;iarr[i])
pos++;
}
if(pos==cyStart)
持续
而(项目==arr[pos])
pos++;
如果(项目!=arr[pos])
掉期(arr[pos],项目);
while(cyStart!=pos)
{
pos=膀胱术;
对于(int i=cyStart+1;iarr[i])
pos++;
}
而(项目==arr[pos])
pos++;
如果(项目!=arr[pos])
掉期(arr[pos],项目);
}
}

对于(int i=0;i,假设我们有一组数据,如下所示: 两组字母“A”到“E”。为了更好地区分它们,我将调用附加数字的重复数据。因此“A”s将是“A1”和“A2”,依此类推。 现在,让我们尝试根据您提到的算法对它们进行排序

  • 步骤1: 取出第一个数据,找到它应该放在的地方。因为我们知道有10个项目,或者2套5个相同的项目,我们知道“E1”会放在第9位

  • 步骤2: “E1”放在第9位,之前在第9位的项目取出进行分拣

  • 步骤3: “E2”放在第10位,“D2”被取出进行排序

  • 步骤4: “E2”放在第7位,“B2”被取出进行排序


    现在您可能已经注意到一个问题了!! “D2”放在第7位,这意味着“D1”只能放在第8位,尽管它应该放在“D2”前面

    这就是“不稳定排序”的意思。排序的结果将独立于原始数据的顺序


继续排序:

  • 步骤5:
  • 步骤6:
  • 步骤7:
  • 您刚刚完成了第一个周期。
  • 开始下一个周期:
  • 步骤8:
  • 步骤9:
  • 步骤10:
  • 步骤11:
  • 步骤12:
  • 您刚刚完成排序

现在看看您的数据,您会注意到两对数据的排序不稳定:

因此,假设我们有一组数据,如下所示: 两组字母“A”到“E”。为了更好地区分它们,我将调用附加数字的重复数据。因此“A”s将是“A1”和“A2”,依此类推。 现在,让我们尝试根据您提到的算法对它们进行排序

  • 步骤1: 取出第一个数据,找到它应该放在的地方。因为我们知道有10个项目,或者2套5个相同的项目,我们知道“E1”会放在第9位

  • 步骤2: “E1”放在第9位,之前在第9位的项目取出进行分拣

  • 步骤3: “E2”放在第10位,“D2”被取出进行排序

  • 步骤4: “E2”放在第7位,“B2”被取出进行排序


    现在您可能已经注意到一个问题了!! “D2”放在第7位,这意味着“D1”只能放在第8位,尽管它应该放在“D2”前面

    这就是“不稳定排序”的意思。排序的结果将独立于原始数据的顺序


继续排序:

  • 步骤5:
  • 步骤6:
  • 步骤7:
  • 您刚刚完成了第一个周期。
  • 开始下一个周期:
  • 步骤8:
  • 步骤9:
  • 步骤10:
  • 步骤11:
  • 步骤12:
  • 您刚刚完成排序

现在看看你的数据,你会注意到有2对数据排序不稳定:

请阅读,什么是“循环算法”?也许可以提供一个描述或链接,因为我认为它并不广为人知。我还建议你选择一两个,了解更多关于标准库的信息,以及它可以帮助你做些什么(例如,通过使用而不是显式分配内存)。只有当排序元素具有排序时未考虑的某些特征时,才能观察排序算法的稳定性。对于
int
,稳定或不稳定的算法将产生完全相同的结果。对于
struct X{int n;std::string name;};
,如果您仅按
n
值对此类结构进行排序,您可能会注意到一个差异。请看一看。我相信这正是您要查找的情况,只是排序是使用Python完成的。请阅读,什么是“循环算法”?也许可以提供一个描述或链接,因为我认为它并不广为人知。我还建议您选择一两个,了解更多关于标准库的信息,以及它可以为您提供哪些帮助(例如使用而不是分配m)