c语言数组排序问题 求助大佬们

作者&投稿:柴旭 (若有异议请与网页底部的电邮联系)
c语言数组排序的问题!!急求高手解答!~

#include
#include
void main()
{int i,k,a=0,b=0;
int ji[10],ou[10];
int fun(int ch[],int x);
printf("请输入10个整数:
");
for(i=0;i<10;i++)
{scanf("%d",&k);
if(k%2==0) {ou[a]=k;a++;}
else {ji[b]=k;b++;};
};
printf("结果为:
");
fun(ji,b);
fun(ou,a);
}

/*冒泡法排序*/
int fun(int ch[],int x)
{int i,j,k;
for(i=0;i<(x-1);i++)
for(j=0;j<(x-1-i);j++)
if(ch[j]>ch[j+1])
{k=ch[j];
ch[j]=ch[j+1];
ch[j+1]=k;
};
for(i=0;i<x;i++)
printf("%d",ch[i]);

return(0);
}

#include
void swap(int& a, int& b) {
int t = a;
a = b;
b = t;
}
void f(int a[], int n) {
// 这里是将能对应上的数字交换
int k;
for (int i = 1; i <= n; i++) {
if (a[i] <= n && a[i] != i) {
k = a[i];
while (k <= n && i != k) {
swap(k, a[k]);
}
a[i] = k;
}
}
// 这里是排序,注意已对应的数字
int min_index, min;
for (int i = 1; i <= n; i++) {
if (a[i] != i) {
min_index = i;
min = a[i];
for (int j = i + 1; j <= n; j++) {
if (a[j] != j && a[j] < min) {
min = a[j];
min_index = j;
}
}
swap(a[i], a[min_index]);
}
}
}
int main()
{
int n;
scanf("%d", &n);
int a[n+1];
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
f(a, n);
for (int i = 1; i <= n; i++) {
printf("%d ", a[i]);
}
return 0;
}
先把能对应上的位置的数通过交换的方法排好,再用选择排序法将剩下的排序。

贴出的代码确实是降序排序的,只是潘旭的额效率极其低而已
注意内层循环的起始是0,结束是n-1
外层遍历的i保证永远下标为i的都是当前数组中的最小值,所以最后一次导致最小是放到了最后

一维数组排序问题(一) 1.起泡(冒泡)法排序 基本思路:每次将相邻两个数比较,将小的(大的)调到前边。如图: 第一趟后最大(最小


沈北新区19641472808: 用C语言怎么对数组元素进行排序,急!!求高手解答 -
锺殃脑震: #include "stdio.h" void reverse(int a[],int pos,int n)//把数组a中从下标pos开始的n个数逆置 { int *p=a+pos; int *q=a+pos+n-1; while(p<q) { int temp=*p; *p=*q;; *q=temp; p++;q--; } } void main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int pos,n; int i; scanf("%d%d",&pos,&n); reverse(a,pos,n); for(i=0;i<10;i++) printf("%d ",a[i]); }

沈北新区19641472808: C语言 一个数组排序问题 请教高手解答 -
锺殃脑震: #include <stdio.h> void swap(int& a, int& b) { int t = a; a = b; b = t; } void f(int a[], int n) { // 这里是将能对应上的数字交换 int k; for (int i = 1; i <= n; i++) { if (a[i] <= n && a[i] != i) { k = a[i]; while (k <= n && i != k) { swap(k, a[k]); } a[i] = k; } } // 这里是排序...

沈北新区19641472808: 一个关于C语言数组排序的问题 -
锺殃脑震: #include<stdio.h>/**排序无用、逻辑错明显**/ void main()#define n 5 { int a[n],i,j,min; printf("请输入数组:"); for(i=0;i<n;i++) scanf("%d",&a[i]); //若使用宏n这里有可能会数组越界 根据编译器类型. for(i=0;i<sizeof(a)/sizeof(a[0])-1;i++) {...

沈北新区19641472808: c语言中的数组排序 -
锺殃脑震: #include #include int numSort(int *a,int count_num) { int i,j,min=-1,temp;for(j=count_num-1;j>0;j--)for(i=j-1;i>=0;i--)if(a[j] > a[i]){ temp=a[i]; a[i]=a[j]; a[j]=temp;min=i;j=0;break;}if(min==-1) return 0;for(i=min+1;i for(j=i+1;j if(a[j] < a[i]) ...

沈北新区19641472808: 问一个C语言编程数组排序的题 -
锺殃脑震: #include<stdio.h> void arrange(int a[10]) { int i=0,j=0,x=0; for(i=0;i<9;i++) { for(j=i;j<10;j++) { if(a[j]<a[i]) { x=a[j]; a[j]=a[i]; a[i]=x; } } } } main(){ int m,b[10]={0}; printf("输入10个成绩:\n"); for(m=0;m<10;m++) scanf("%d",&b[m]); arrange(b); printf(...

沈北新区19641472808: 如何用c语言给输入的二维数组每一行排序 -
锺殃脑震: 可以用stdlib.h中的qsort函数 如果是int a[10][10]的话 排序第i行 qsort(a[i],10,sizeof(int),comp); 就可以了,comp是一个比较函数 int comp(const void *m1, const void *m2){ return *(int*)m1-*(int*)m2; } 这样就可以排序了,如果要反序,就将comp中的m1和m2互换,可以试试,如果不对可以Hi我

沈北新区19641472808: 求解c语言数组排序的题目!!? -
锺殃脑震: 更正一下你程序中的错误: while(j

沈北新区19641472808: 关于C语言的数组排序问题 -
锺殃脑震: 这段代码不过是将数组的1、4位调换顺序,2、3位调换顺序,根本没什么排序 如果输入的是0 1 2 3 4的话,输出应该是3 2 1 0 4,第五位是不变的 排序方法有很多,冒泡法什么的

沈北新区19641472808: C语言数组排列问题
锺殃脑震: 你这里定义和程序不完整啊!这段程序排序问题,for(i=1;i<n;i++)表示i从1开始,到n-1. 条件成立,则每执行一次for(j=0;……)就是从这开始到该程序结束)那么i就加1并进行判断进入下一次执行 for(j=0;……).而for(j=0;j<n=i;i++).表示在j小于当前i的情况下,例如当前的i=2,则j小于2,为0,1.)执行下面交换语句(if语句),if语句是判断b[j]和b[j+1]如果前者大,则交换两者位置,如果前者小则不交换.这个程序是逐步比较交换排序,最终是将某组数按顺序排列.

沈北新区19641472808: C语言中怎么对数组随机排序? -
锺殃脑震: #include<stdio.h> #include<time.h> #include<stdlib.h> #define SIZE 1000 main() {int ary[SIZE],i=0,j,k;time_t t;srand((unsigned)time(&t));//随机数的产生与系统时间有关for(i=0;i<SIZE;i++) //输出生成数结果{ary[i]=rand()%1000+1;k=find(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网