Sắp sếp số theo thứ tự tăng dần bị lỗi

1 phần tử tính làm gì đâu mình xem lại rồi bị thiêu dấu và ở dòng cuối mà vẫn chạy

sao vẫn chưa sắp xếm nhỉ

code bạn thiếu khá nh chỗ, chạy k đc

bạn xem hộ tớ với…

Hàm swap(int,int) khi thực hiện xong không có tác dụng gì. Bạn phải thay bằng con trỏ

int swap(int * a,int * b){
* a^= * b;
* b^=* a;
* a^=* b;
}
1 Like

minh chua hoc con tro chuot ban a

sao swap không có tác dụng nhỉ??? không sắp xếp gì cả

code bạn chỗ hoán vị phải sử dụng địa chỉ nó mới cập nhật đc dữ liệu, vì hàm hoán vị của bạn k xài địa chỉ nên nó k hoạt động thôi, code mình đã sửa vài chỗ, bài xem tham khảo

#include<stdio.h>
#include"conio.h"
void input(int A[], int n)
{
	for (int i = 0; i<n; i++)
	{
		printf("A[%d]", i);
		scanf_s("%d", &A[i]);
	}
}
void swap(int &x,int &y)
{
	int temp,i,j;
	temp = x;
	x = y;
	y = temp;
}
void hoandoi(int A[], int n)
{
	for (int i = 0; i<n - 1; i++)
		for (int j = i+1; j<n; j++)
			if (A[i]>A[j])
				swap(A[i], A[j]);
}
void display(int A[], int n)
{
	for (int i = 0; i<n; i++)
		printf("%d", A[i]);
}
void main()
{
	int  n, A[100];
	scanf_s("%d", &n);
	input(A, n);
	printf("mang truc khi sap\n");
	display(A, n);
	printf("\nmang sau khi spa\n");
	hoandoi(A, n);
	display(A, n);
	_getch();
}
2 Likes
void swap(int &x,int &y)
{
	int temp,i,j;
	temp = x;
	x = y;
	y = temp;
}

&x va &y la gi thế bạn mình không biết cái này sao lại có thếm i và j làm gì vậy

&x,&y trong C++ gọi là reference . Nhưng trong C thì hàm viết như vậy không chạy được

3 Likes

có cách nào khác không bạn

đúng như lời @Gio nói. “&” trong C++ gọi là reference, nói dễ hiểu là tham chiếu, còn dễ hiểu hơn có nghĩa là địa chỉ. Trong C thì bạn có thể tham khảo cách của @Gio. À, còn i vs j k có gì đâu, nãy mình bỏ nhầm chỗ đó, bạn có thể xóa nó :))

1 Like

nhưng sao mình chạy chương trình C vẫn chạy nhỉ. chẳng hiểu

1 Like

Chắc trình biên dịch của bạn không phải thuần C :smile:

1 Like

cũng còn tùy vào compiler nữa bạn à

Cai & x &y là của C++ nếu C thì làm sao hả bạn

1 Like

C++ va C khác nhau không các bạn

2 Likes

@Toi_Do nếu là C thì bạn có thể sử dụng cách của Gió nêu ở trên đấy. Còn C vs C++ khác nhau thì chỉ khác phương thức vs chút xíu ngôn ngữ thôi, còn lại thì y chang nhau :))

2 Likes

Mình sửa lại code của bạn như sau:

#include<stdio.h>
void input(int A[],int n);
void swap( int x, int y) ;
void hoandoi (int A[],int n);
void display(int A[], int n);
int main() {
    int n,A[100];
    printf("Nhap so phan tu cua mang:");
    scanf("%d",&n);
    input(A,n);
	printf("mang truoc khi sap:");
    display(A,n);
	printf("\nmang sau khi sap:");
    hoandoi(A,n);
    display(A,n);
    return 0;
}
void input(int A[],int n) {
    for(int i=0; i<n; i++) {
        printf("A[%d]=",i);
        scanf("%d",&A[i]);
    }
}
void swap( int *x, int *y) {
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}
void hoandoi (int A[],int n) {
    for(int i=0; i<n-1; i++)
        for(int j=i+1; j<n; j++)
            if(A[i]>A[j])
                swap(&A[i],&A[j]);
}
void display(int A[], int n) {
    for(int i=0; i<n; i++)
        printf("%d\t",A[i]);
}

Mình lưu ý vài điểm về code của bạn:
1.Khi bạn khai báo int hoandoi (int A[],int n) như thế này thì hàm hoandoi phải trả về hàm gọi nó một số nguyên.
2.Khi dùng hàm nên khai báo trước rồi mới định nghĩa.
3.Ở hàm swap, bạn dùng để hoán đổi 2 biến muk lại để tham số của hàm là 2 biến thì sẽ không giải quyết được vấn đề. Cái này bạn nên xem video sau:




2 Likes

C++ phát triển dựa trên nền tảng C. C++ có hỗ trợ hướng đối tượng, và nhiều thứ khác :smile:

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?