30/09/2018, 18:19

Nhờ sửa code mô phỏng thuật toán sắp xếp

mọi người giúp em sửa chữa code này với, nó sắp xếp không như mong muốn ạ

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
#define size 100
#pragma warning (disable: 4996)

void gotoxy(int x, int y);
void sapxep(int a[], int n);
void taomang(int a[], int &n);
void xuatmang(int a[], int n);
void hoanvi(int &a, int &b, int c, int d);

int main()
{
    int n, m;
    int a[size];
    taomang(a,n);
    xuatmang(a,n); 
    gotoxy(0,8);
    xuatmang(a,n);
    sapxep(a,n);
    getch();
}

void taomang(int a[], int &n)
{
	scanf("%d", &n);
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
}

void xuatmang(int a[], int n)
{
    for(int i = 0 ; i < n ; i++)
        printf("%d ",a[i]);
}

void sapxep(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] )
                hoanvi(a[i],a[j],i,j);
    printf("

Done!!!");
}

void gotoxy(int x, int y)
{
    static HANDLE  h = NULL;
    if(!h)
        h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD c = {x,y};
    SetConsoleCursorPosition(h,c);
}

void hoanvi(int &a, int &b, int c, int d)
{
    int tmp,tmp1,tmp2,tmp3;
    for(int i = 7; i >= 4; i--)
    {
        Sleep(50);
        gotoxy(c,i+1);
            printf(" ");
        gotoxy(c,i);
            printf("%d",a);
        tmp = i;
    }
    for(int i = 1; i <= d-c; i++)
    {
        Sleep(50);
        gotoxy(c+i-1,tmp);
            printf(" ");
        gotoxy(c+i,tmp);
            printf("%d",a);
        tmp1 = c+i;
    }
    for(int i = 1; i <= 4; i++)
    {
        Sleep(50);
        gotoxy(tmp1,tmp+i-1);
            printf(" ");
        gotoxy(tmp1,tmp+i);
            printf("%d",a);
        gotoxy(d,8+i-1);
            printf(" ");
        gotoxy(d,8+i);
            printf("%d",b);    
        tmp2 = 8+i;    
    }    
    for(int i = 1; i <= d-c; i++)
    {
        Sleep(50);
        gotoxy(d-i+1,tmp2);
            printf(" ");
        gotoxy(d-i,tmp2);
            printf("%d",b);
        tmp3 = d-i;
    }
    for(int i = tmp2; i >= 8; i--)
    {
        Sleep(50);
        if(i != tmp2)
        {
            gotoxy(tmp3,i+1);
                printf(" ");
        }
        gotoxy(tmp3,i);
            printf("%d",b);
    }
    int temp = a;
    a = b;
    b = temp;
}
Mai Anh Dũng viết 20:21 ngày 30/09/2018

Em cho thêm thông tin mới giúp được

Đây là thuật toán gì, em muốn sắp xếp cái gì, dữ liệu nhập vào như thế nào, mong muốn xuất ra như thế nào, vấn đề đang gặp phải là gì?

Giang Phạm viết 20:33 ngày 30/09/2018

cái hàm hoanvi khi chạy debug nó sắp xếp không chính xác anh ạ, lại còn xuất hiện thêm các phần tử thừa, code ở đây em muốn sắp xếp theo kiểu bubble sort, anh có thể chạy biên dịch để xem thử và chỉ em cách giải quyết được không ạ ?

taplamhacker viết 20:23 ngày 30/09/2018

Sao bạn k hỏi ngay tại nguồn vậy, lại qua đây hỏi :v
Xin phép cho mình trích nguồn

http://vforum.vn/diendan/showthread.php?66914-Mo-Phong-thuat-toan-sap-xep-doi-cho-truc-tiep
Giang Phạm viết 20:25 ngày 30/09/2018

hỏi nhiều nơi nhiều nguồn mới có cơ hội được giải đáp nhiều hơn bạn à

taplamhacker viết 20:20 ngày 30/09/2018

code đó của mfinh bên vforum bạn cần gì mình giải thích cho

Giang Phạm viết 20:27 ngày 30/09/2018

a giờ mới nhận ra 2 người là 1, nhớ bữa mình cũng có ib hỏi mà nhỉ
hì, à được r, code này của bạn chạy trên visual studio 2015 không được nên mình đã mạn phép sửa chút ít, nhưng không ảnh hưởng lớn đến nội dung code của bạn và đây là kết quả, bạn xem giúp mình được hông

taplamhacker viết 20:21 ngày 30/09/2018

xin lỗi bạn vì mình k tìm dc cách ib cho bạn trên này
và bị giới hạn 3 post nên edit cái này
để canh xy cho chuẩn thì cách tốt nhất là khi nhập xong bạn phải xóa màng hình
x là vị trí trên hàng
y là vị trí dòng
gotoxy là bạn đưa con trỏ tới vị trí (x,y)
bạn phải xem dữ liệu của bạn thuộc khoản nào 0 -> 9 chỉ có 1 ký tự hoặc âm thì thêm dấu -
lúc này x phải tăng lên tùy theo số ký tự khi in ra 1 sô, và số ký tự space để xóa số đó
khi sửa như bạn nếu giải sử nhập vào chỉ từ 0 -> 9 thì giá trị nào liên quan tới x bạn phải tăng lên 1
đối với mảng có nhiều số vd: 1 10 100 1000
thì bạn phải biết làm sao để trong 5 ký tự 4 ký tự số là 1 dấu cách, tính toán lúc này x là bao nhiêu
chúc bạn thành công

Giang Phạm viết 20:30 ngày 30/09/2018

vậy nếu mình muốn nhập mảng bằng tay, thì mình canh x y như thế nào nhỉ bạn
cách canh xy trong bài gốc của bạn là bạn làm theo nguyên tắc nào vậy

Bài liên quan
0