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;
}
Bài liên quan
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ì?
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 ạ ?
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
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 à
code đó của mfinh bên vforum bạn cần gì mình giải thích cho
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
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
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