C 使用指针的排序程序
我有一个计划:C 使用指针的排序程序,c,pointers,bubble-sort,calloc,C,Pointers,Bubble Sort,Calloc,我有一个计划: 给定一系列数字 按升序排列偶数,然后 按降序排列奇数,然后 将排序后的偶数与排序后的奇数相加到数组中 例如: Input: 1, 2, 3, 4, 5, 6 Expected output: 2, 4, 6, 5, 3, 1 Actual output: 1578032, 0, 3, 6, 6487408, 0 这是我的密码: #include < stdio.h > int main() { input(); } int input()
- 给定一系列数字
- 按升序排列偶数,然后
- 按降序排列奇数,然后
- 将排序后的偶数与排序后的奇数相加到数组中
Input: 1, 2, 3, 4, 5, 6
Expected output: 2, 4, 6, 5, 3, 1
Actual output: 1578032, 0, 3, 6, 6487408, 0
这是我的密码:
#include < stdio.h >
int main() {
input();
}
int input() {
int n;
printf("Enter The Number Of Elements You Want To Enter : ");
scanf("%d", & n);
int * ptr, i, ev = 0, od = 0;
ptr = (int * ) calloc(n, sizeof(int));
for (i = 0; i < n; i++) {
printf("Enter Number : ");
scanf("%d", (ptr + i));
if ( * (ptr + i) % 2 == 0) {
ev++;
} else {
od++;
}
}
sorteven( & ptr, ev, od, n);
}
int sorteven(int * ptr, int ev, int od, int n) {
int i, j = 0, swap = 0, * ptreven;
ptreven = (int * ) calloc(ev, sizeof(int));
for (i = 0; i < n; i++) {
if ( * (ptr + i) % 2 == 0) { *
(ptreven + j) = * (ptr + i);
j++;
}
}
for (i = 0; i < ev - 1; i++) {
for (j = 0; j < ev - i - 1; j++) {
if ( * (ptreven + j) > * (ptreven + j + 1)) {
swap = * (ptreven + j); *
(ptreven + j) = * (ptreven + j + 1); *
(ptreven + j + 1) = swap;
}
}
}
sortodd( & ptr, ev, od, n, & ptreven);
}
int sortodd(int * ptr, int ev, int od, int n, int ptreven) {
int i, k = 0, swap = 0, * ptrodd, j;
ptrodd = (int * ) calloc(od, sizeof(int));
for (i = 0; i < n; i++) {
if ( * (ptr + i) % 2 != 0) { *
(ptrodd + k) = * (ptr + i);
k++;
}
}
for (i = 0; i < od - 1; i++) {
for (j = 0; j < od - i - 1; j++) {
if ( * (ptrodd + j) < * (ptrodd + j + 1)) {
swap = * (ptrodd + j); *
(ptrodd + j) = * (ptrodd + j + 1); *
(ptrodd + j + 1) = swap;
}
}
}
merge( & ptr, ev, od, n, & ptreven, & ptrodd);
}
int merge(int * ptr, int ev, int od, int n, int * ptreven, int * ptrodd) {
int * ptrmerge, i, j;
ptrmerge = (int * ) calloc(n, sizeof(int));
for (i = 0; i < ev; i++) { *
(ptrmerge + i) = * (ptreven + i);
}
for (i = ev, j = 0; i < n; i++, j++) { *
(ptrmerge + i) = * (ptrodd + j);
}
display( & ptrmerge, n);
}
int display(int * ptrmerge, int n) {
int i;
printf("OUTPUT : ");
for (i = 0; i < n; i++) {
printf(" %d ", * (ptrmerge + i));
}
}
#包括
int main(){
输入();
}
int输入(){
int n;
printf(“输入要输入的元素数:”);
scanf(“%d”和“&n”);
int*ptr,i,ev=0,od=0;
ptr=(int*)calloc(n,sizeof(int));
对于(i=0;i*(ptreven+j+1)){
交换=*(ptreven+j)*
(ptreven+j)=*(ptreven+j+1)*
(ptreven+j+1)=互换;
}
}
}
索托德(和ptr、ev、od、n和ptreven);
}
int sortodd(int*ptr、int ev、int od、int n、int ptreven){
int i,k=0,swap=0,*ptrodd,j;
ptrodd=(int*)calloc(od,sizeof(int));
对于(i=0;i
像这样
#include <stdio.h>
#include <stdlib.h>
void input(void);
int main(void){
input();
}
void sorteven(int *ptr, int n);
void sortodd(int *ptr, int n);
void display(int *ptt, int n);
void input(void){
int n;
printf("Enter The Number Of Elements You Want To Enter : ");fflush(stdout);
scanf("%d", &n);
int *ptr, i, ev = 0, od = 0;
if((ptr = calloc(n, sizeof(int)))==NULL){
perror("malloc");
exit(EXIT_FAILURE);
}
for (i = 0; i < n; i++){
int v;
printf("Enter Number : ");fflush(stdout);
scanf("%d", &v);
if(v % 2 == 0){
ptr[ev++] = v;
} else {
ptr[n - ++od] = v;
}
}
sorteven(ptr, ev);
sortodd(ptr + ev, od);
display(ptr, n);
free(ptr);
}
void sorteven(int *ptr, int n){
//sort to ascending order
int i, j, temp;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n - i - 1; j++){
if(ptr[j] > ptr[j + 1]){
int temp = ptr[j];
ptr[j] = ptr[j + 1];
ptr[j + 1] = temp;
}
}
}
}
void sortodd(int *ptr, int n){
//sort to descending order
int i, j, temp;
for (i = 0; i < n - 1; i++){
for (j = 0; j < n - i - 1; j++){
if(ptr[j] < ptr[j + 1]){
int temp = ptr[j];
ptr[j] = ptr[j + 1];
ptr[j + 1] = temp;
}
}
}
}
void display(int *ptr, int n){
int i;
printf("\nOUTPUT : ");
for (i = 0; i < n; i++){
if(i)
putchar(' ');
printf("%d", ptr[i]);
}
putchar('\n');
}
#包括
#包括
作废输入(作废);
内部主(空){
输入();
}
无效分拣机(int*ptr,int n);
void sortodd(int*ptr,int n);
无效显示(int*ptt,int n);
无效输入(无效){
int n;
printf(“输入要输入的元素数:”);fflush(stdout);
scanf(“%d”和“&n”);
int*ptr,i,ev=0,od=0;
if((ptr=calloc(n,sizeof(int)))==NULL){
佩罗尔(“马洛克”);
退出(退出失败);
}
对于(i=0;iptr[j+1]){
内部温度=ptr[j];
ptr[j]=ptr[j+1];
ptr[j+1]=温度;
}
}
}
}
void sortodd(int*ptr,int n){
//按降序排序
int i,j,温度;
对于(i=0;i
sortodd(&ptr,ev,od,n,&ptreven);}int-sortodd(int*ptr,int-ev,int-od,int-n,int-ptreven)
:ptr和ptreven的类型不同<代码>合并(&ptr,ev,od,n,&ptreven,&ptrodd);}int合并(int*ptr、int ev、int od、int n、int*ptreven、int*ptrodd):同上。等等。您的程序有多个逻辑和编程问题。e、 g.(ptr+i),ptr是指向整数的指针,i是一个整数,您想如何进行该操作。另外,在编译级别检查警告也不错,它们为您提供了很好的信息。Yo在代码中多次重复此操作。首先修复简单的错误,然后将更正后的代码放在这里,以查找逻辑问题。我认为你的问题在于不理解指针是如何指向的works@BLUEPIXY你能更正代码吗?@SyedHussain你可以使用qsort
这样做,会使你的代码更短。作为家庭作业,这一点是为了让你学会如何使用编译器等工具来帮助你编写代码。阅读@Eisa给你的建议,并遵循它。一旦您有了编译时没有警告的代码,请寻求人工帮助。或者请求人工帮助修复特定的编译器错误和/或警告。如果你不喜欢这种方法,那么你现在应该停止参加编程课程,因为编程就是这样,你需要习惯它或者停止做它。