排序数组C程序
我需要制作一个程序,对给定的数组进行排序,使具有相同数字的数字位于前面。顺序必须保持不变。这将是一个大问题,但我不允许使用任何额外的数组、函数等。我真的不知道如何对数字进行排序,使顺序保持不变。而且阵列最多有100个元素 例如: 输入: 12243444511678889011 输出: 1,22444,78888,11,43,51,16,90 到目前为止,我已经写过:排序数组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
#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