Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Sorting - Fatal编程技术网

排序数组C程序

排序数组C程序,c,arrays,sorting,C,Arrays,Sorting,我需要制作一个程序,对给定的数组进行排序,使具有相同数字的数字位于前面。顺序必须保持不变。这将是一个大问题,但我不允许使用任何额外的数组、函数等。我真的不知道如何对数字进行排序,使顺序保持不变。而且阵列最多有100个元素 例如: 输入: 12243444511678889011 输出: 1,22444,78888,11,43,51,16,90 到目前为止,我已经写过: #include <stdio.h> int main() { int a = 0, i = 0, niz

我需要制作一个程序,对给定的数组进行排序,使具有相同数字的数字位于前面。顺序必须保持不变。这将是一个大问题,但我不允许使用任何额外的数组、函数等。我真的不知道如何对数字进行排序,使顺序保持不变。而且阵列最多有100个元素

例如:

输入: 12243444511678889011

输出: 1,22444,78888,11,43,51,16,90

到目前为止,我已经写过:

#include <stdio.h>

int main()
{
    int a = 0, i = 0, niz[100], temp, N, j, logika, cifra1, cifra2, brojac = 0, brojac2 = 1;
    printf("Unesite brojeve: \n");
    do {
        scanf("%d", &niz[i]);
        if (niz[i] == -1) {
            i--;
            break;
        }
        i++;
    } while (i < 100);

    N = i;

    for (i = 0; i < N; i++) {
        a = niz[i];
        logika = 1;
        cifra1 = a % 10;
        cifra2 = niz[i] / 10;


        while (cifra2) {
            if (cifra2 % 10 != cifra1) {
                logika = 0;
                break;
            }
            cifra2 = cifra2 / 10;
        }

        if (a / 10 == 0) logika = 1;

        if (logika == 1) {
            niz[brojac++] = niz[i];
        }
        if (logika == 0) {
            niz[i] = temp;
            niz[N - 1] = niz[i];
            niz[N - i] = temp;
        }
    }

    printf("Nakon preslaganja niz glasi: \n");
    for (i = 0; i <= N; i++) {
        if (i < N)
            printf("%d,", niz[i]);
        else {
            printf("%d.", niz[i]);
        }
    }

    return 0;
}

我已经完成了选择排序。它并没有给出您所期望的结果

#include<iostream>
using namespace std;

int main(){
    int x;
    cout<<"Enter Size Of Array";
    cin>>x;
    const int SIZE=x;
    int a[SIZE];
    int copy[SIZE];
    cout<<"Enter "<<SIZE<<" Value";
    for(int i=0;i<SIZE;i++){
        cin>>a[i];
    }
    for(int i=0;i<SIZE;i++){
        copy[i]=a[i];
    }

    for(int i=0;i<SIZE;i++){
        int n=a[i];
        int temp;
        int rem=n%10;
        bool isAllDigitSame=false;
        while(n!=0){
            if(rem==n%10){
                isAllDigitSame=true;
            }
            else{
                isAllDigitSame=false;
                break;
            }
            n=n/10;
        }

        if(isAllDigitSame){
            temp=a[i];
            a[i] = a[i]%10;
        }
    }

    cout<<"A="<<endl;
    for(int i=0;i<SIZE;i++){
        cout<<a[i]<<endl;
    }
    cout<<endl;

    for(int i=0;i<SIZE;i++){
        int min=i;

        for(int j=i;j<SIZE;j++){
            if(a[j]<a[min]){
                min=j;
            }
        }
         int temp;
        temp=copy[i];
        copy[i]=copy[min];
        copy[min]=temp;
        temp=a[i];
        a[i]=a[min];
        a[min]=temp;
    }
    cout<<"Copy="<<endl;

    for(int i=0;i<SIZE;i++){
        cout<<copy[i]<<endl;
    }
    return 0;
}

可能您的意思是将排序的顺序放入新数组,同时保持原始数组不变?否则,senseI并不意味着要先替换给定数组的元素来生成repdigits。有人问了这个问题。虽然他们并没有得到一个实际的答案——我还并没有写出一个答案,因为我的代码使用了一个二次排序。使用稳定的排序气泡、insert、merge和适当的谓词函数来测试两个数字的所有数字是否相同,这样就可以进行排序。不使用任何用户定义的函数是一件痛苦的事情,甚至连想都不敢想——我直截了当地拒绝与这些废话有任何关系。@JonathanLeffler我直截了当地拒绝与这些废话有任何关系。–我没有那么大的尊严:/@Swardfish:古老和衰老的一个优势是,我可以随时做出这样的决定,而不会对我的大学生涯造成重大风险,我的大学生涯几乎肯定比OP还早就结束了。欢迎来到Stack Overflow。请尽快阅读这两页。您已经编写C++代码作为对C标记的问题的答案。这是没有帮助的,因为您的代码肯定不会用纯C编译器编译。此外,正如您自己所承认的,代码的输出不是OP想要的。在“相同数字”编号内,输出序列必须与输入序列相同,在“不同数字”编号内,输出序列也必须与输入序列相同。您的输出在22、444、7和8888之前移动了11-糟糕!我建议删除这个答案,直到您能够修复这些问题——使用C库函数和头文件而不是C++,并使算法正确工作。这是可以做到的!
#include<iostream>
using namespace std;

int main(){
    int x;
    cout<<"Enter Size Of Array";
    cin>>x;
    const int SIZE=x;
    int a[SIZE];
    int copy[SIZE];
    cout<<"Enter "<<SIZE<<" Value";
    for(int i=0;i<SIZE;i++){
        cin>>a[i];
    }
    for(int i=0;i<SIZE;i++){
        copy[i]=a[i];
    }

    for(int i=0;i<SIZE;i++){
        int n=a[i];
        int temp;
        int rem=n%10;
        bool isAllDigitSame=false;
        while(n!=0){
            if(rem==n%10){
                isAllDigitSame=true;
            }
            else{
                isAllDigitSame=false;
                break;
            }
            n=n/10;
        }

        if(isAllDigitSame){
            temp=a[i];
            a[i] = a[i]%10;
        }
    }

    cout<<"A="<<endl;
    for(int i=0;i<SIZE;i++){
        cout<<a[i]<<endl;
    }
    cout<<endl;

    for(int i=0;i<SIZE;i++){
        int min=i;

        for(int j=i;j<SIZE;j++){
            if(a[j]<a[min]){
                min=j;
            }
        }
         int temp;
        temp=copy[i];
        copy[i]=copy[min];
        copy[min]=temp;
        temp=a[i];
        a[i]=a[min];
        a[min]=temp;
    }
    cout<<"Copy="<<endl;

    for(int i=0;i<SIZE;i++){
        cout<<copy[i]<<endl;
    }
    return 0;
}
Input :1 22 43 444 51 16 7 8888 90 11
Output: 1 11 22 444 7 8888 16 43 51 90