Read-only archive. Login and posting are unavailable.
Reply
 
Thread Tools
  #11  
Old 12-11-2010, 21:12
Dark_D's Avatar
Member
Join Date: 07-2008
Posts: 78
Re: [lập trình C++] Sắp xếp mảng

Quote:
Originally Posted by Dark_D View Post
Dùng bubble sort nhưng thay đổi điều kiện if(a[i]>a) thành mấy cái điều kiện (a[i]==0&&a<0) thì đổi chỗ, tương tự làm thêm mấy cái if khác (a[i]<0&&a>0),(a[i]>0&&a=0) nữa thì đc kết quả không nhỉ
Lười làm quá =.=!
Post xong quay ra coi thấy chủ thớt cũng làm tương tự mình, bác sửa hàm check thành nếu <0 thì -1, lớn hơn 0 thì là 1, bằng 0 thì là 0 rồi hàm if ở vòng lặp thêm mấy cái else xem đi
__________________
[CENTER][B]Ngây thơ trong sáng - thâm sâu trong tối.[/B][/CENTER]
Reply With Quote
  #12  
Old 12-11-2010, 21:20
antonixic's Avatar
Member
Join Date: 10-2008
Posts: 61
Re: [lập trình C++] Sắp xếp mảng

Quote:
Originally Posted by Dark_D View Post
Post xong quay ra coi thấy chủ thớt cũng làm tương tự mình, bác sửa hàm check thành nếu <0 thì -1, lớn hơn 0 thì là 1, bằng 0 thì là 0 rồi hàm if ở vòng lặp thêm mấy cái else xem đi
hêhê, em cũng sửa check trả về -1, 0 ,1. Xong cũng thêm if vào phần do while mà mãi vẫn chưa đc
Reply With Quote
  #13  
Old 12-11-2010, 21:34
flsfls's Avatar
Member
Join Date: 09-2008
Posts: 77
Re: [lập trình C++] Sắp xếp mảng

code day. em test thu thay co ve dung tuy hoi dai ti
#include
#include

/*
*j luu so phan tu am da duoc sap xep
*/
void main()
{
int array[11] = {-3, 5, 8, 0, -4, -2, 0, 1, 0, -5, -1};
int i, j,k,l, tmp;

j = -1, k = 0;

printf("phan tu mang ban dau\n");
for(i = 0; i<11; i++)
printf("%d ", array[i]);
/* dua cac phan tu am ve dau mang*/
for(i = 0; i<11; i++)
{
if(array[i] < 0)
{
j++;
if(i == j)
{
continue;
}

tmp = array[i];
for(l = i; l>=j; l--)
{

array = array[l-1];
}
array = tmp;
}
}

/* dua cac phan tu 0 ve giua mang*/
for(i = j; i<11; i++)
if(array[i] == 0)
{
j++;
if(i == j)
continue;

tmp = array[i];
for(l = i; l>=j; l--)
array = array[l-1];
array = tmp;
}

/* in ra phan tu mang sau khi sap xep*/
printf("\nphan tu mang sau khi sap xep\n");
for(i = 0; i<11; i++)
printf("%d ", array[i]);
}

ket qua dinh kem
Attached Thumbnails
Click image for larger version

Name:	1.png‎
Views:	14
Size:	18.1 KB
ID:	278419  
__________________
Người ra đi đầu không ngoảnh lại
Sau lưng thềm nắng lá rơi đầy
[QUOTE=invisible;22914343]Quen năm 1999, yêu năm 2002, cưới năm 2007, có rất nhiều thứ mà cả 2 đã cùng nhau vượt qua, tớ và vợ tớ khi yêu nhau đều là mối tình đầu.[/QUOTE]
Reply With Quote
  #14  
Old 12-11-2010, 21:38
Dark_D's Avatar
Member
Join Date: 07-2008
Posts: 78
Re: [lập trình C++] Sắp xếp mảng

Gõ trong C#, máy ko có C++ =.=! Bạn xem thử nhé =.+!

Quote:
static int check(int a)
{
if (a < 0) return -1;
else if (a == 0) return 0;
else return 1;
}
static void Main(string[] args)
{
int[] a = new int[] {-3,-5,0,-2,5,0,4,-2};
for (int i = 0; i < a.Count(); i++)
for (int j=i;j<a.Count();j++)
if (check(a) < check(a[i]))
{
int temp = a;
a = a[i];
a[i] = temp;
}

for (int i = 0; i < a.Count(); i++) Console.Write(a[i]+" ");
Console.ReadLine();
}
Code bị lỗi ở khúc cuối, số dương đầu tiên bị đẩy xuống cuối chuỗi
__________________
[CENTER][B]Ngây thơ trong sáng - thâm sâu trong tối.[/B][/CENTER]
Reply With Quote
  #15  
Old 12-11-2010, 21:40
untouchable's Avatar
Đã tốn tiền
Join Date: 11-2009
Posts: 450
Re: [lập trình C++] Sắp xếp mảng

Ko cần dùng bubble sort đâu, chia công việc 2 phần gom vào 1 lặp là xong. Nhìn lặp nhiều vậy chứ thật ra chạy nhanh vì chỉ số dòng lặp ngoài cùng là i nó vẫn tăng liên tục trong các vòng lặp con nên chạy rất mau (Bạn debug sẽ thấy) .
Code:
#include
using namespace std;

void Swap(int &a,int &b)
{
	int t=a;
	a=b;
	b=t;
}
int main()
{
	int a[]={-3, 5, 8, 0, -4, -2, 0, 1, 0, -5, -1,6,-1,0,-2,3,-1,-5};
	int n=sizeof(a)/sizeof(a[0]);
	int i,j;
	//Cờ zero chưa bật tức là chưa đến lượt xử lý dồn số 0
	bool Zero=false;
	for( i=0;i xử lý dồn số âm
		{
			while(j>i)
			{
				//a chạy đến khi gặp số không âm đầu tiên
				while(a[i]<0) i++;
				//j chạy đến khi gặp số âm đầu tiên
				while(a>=0) j--;
				if(j>i)//2 chỉ số vẫn chưa đụng nhau
					Swap(a[i],a);//Swap để dồn số âm đằng sau lên
			}
			//xong phần số âm thì bật cờ zero bắt đầu dồn số 0 vào tiếp
			Zero=true;
		}
		else
		{
			//bắt đầu xử lý số 0
			while(j>i)
			{
				//i dừng khi gặp số 0 đầu tiên
				while(a[i]==0) i++;
				//j dừng khi gặp số dương đầu tiên
				while(a>0) j--;
				//Nếu 2 chỉ số chưa đụng nhau
				if(j>i) Swap(a[i],a);//Swap đề dồn 0 lên trước (phần giữa mảng)
			}
			//hoàn thành thì break
			break;
		}
	}
	
	return 0;
}
P/s: Code dài quá là do 1 dòng code 1 dòng comment
__________________
PC: [COLOR="Red"]Ryzen 9 3900X[/COLOR] | [COLOR="Teal"]X570 Strix E[/COLOR] | [COLOR="Orange"]Corsair Vegeance Pro 32GB Bus 3000[/COLOR] | [COLOR="Lime"]2070 Super Strix OC[/COLOR] | [COLOR="Magenta"]860 Evo 512GB[/COLOR] | [COLOR="Green"]CoolerMaster ML360R[/COLOR] | [COLOR="Blue"]Andyson 1200W Platinum[/COLOR]
Gears: [COLOR="Cyan"]Strix Flare Red Switch[/COLOR] | [COLOR="Teal"]ROG Pugio[/COLOR]
Reply With Quote
  #16  
Old 12-11-2010, 21:43
nopass289's Avatar
Senior Member
Join Date: 09-2010
Posts: 1,604
Re: [lập trình C++] Sắp xếp mảng

cái này chắc làm 2 vòng for là xong thôi, cứ đến số nào <0 thì swap nó với số bên phải nó là đc, nghĩ thế, sai các bác đừng ném gạch
Reply With Quote
  #17  
Old 12-11-2010, 21:45
K.I.A
Join Date: 03-2010
Posts: 436
Re: [lập trình C++] Sắp xếp mảng

Không cho dùng array thì dùng linked list based queue, quất 3 cái queue là xong xuôi.
__________________
[QUOTE=lovestone01;22221304]Mình chỉ biết lực lượng xe dù của VN ta khá mạnh so với thế giới còn lính dù biệt kích thì chắc không có quá , giữ nhà chưa xong nhảy đi đâu ?:)[/QUOTE]

[QUOTE=học mà chơi;22221322]xe dù là của binh chủng nào thế bác ? thiết giáp xa à?[/QUOTE]

=))
Reply With Quote
  #18  
Old 12-11-2010, 21:52
antonixic's Avatar
Member
Join Date: 10-2008
Posts: 61
Re: [lập trình C++] Sắp xếp mảng

@Các bác ở trên: cảm ơn các bác nhọc công code, em đang test thử

Quote:
Originally Posted by rar_hill View Post
Không cho dùng array thì dùng linked list based queue, quất 3 cái queue là xong xuôi.
ax, nói như bác em làm cái struct cũng xong
Reply With Quote
  #19  
Old 12-11-2010, 21:54
flowerfx's Avatar
K.I.A
Join Date: 08-2010
Posts: 1,085
Re: [lập trình C++] Sắp xếp mảng

check it out, easy and understood

Code:
#include "conio.h"
#include 
using namespace std;

int main(void)
{
	//int n=11; 
	//int a[11]={-3,5,8,0,-4,-2,0,1,0,-5,-1}; 
	//for(int i=0;i>n;
	int * a=new int ;
	for(int i=0;i>a[i];}
	for(int i=0;i0;i--){
		for(int j=i-1;j>=0;j--){if(a[i]==00&&a>0){swap(a[i],a);}}
	}
	for(int i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){if(a[i]==0&&a<0){swap(a[i],a);}}
	}
	for(int i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;
	return 1;

}
caí này vừa chạy vừa debug luôn, sướng vãi ,lại rất đơn giản dễ hiểu
__________________
..........
Reply With Quote
  #20  
Old 12-11-2010, 22:03
Junior Member
Join Date: 09-2008
Posts: 21
Re: [lập trình C++] Sắp xếp mảng

Mềnh là mềnh chưa thử nhưng thấy các bợn làm có swap là nghi lắm, swap sẽ làm mất thứ tự các số cùng loại trong dãy. Cái này phải dồn toa mới được
Reply With Quote
Reply

« Previous Thread | Next Thread »

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


All times are GMT +7. The time now is 16:22.