Sửa dòng :
lại thànhCode:for(i=0;i<10;i++)
Code:for(i=0;i<10-1;i++)
em có đoạn chương trình sắp xếp như sau :
khi nhập 9 8 7 6 5 4 3 2 1 0 kết quả nó như thế này : 0 1 2 3 4 9 6 7 8 9 ,nhập các số khác cũng lỗi tương tự ,đệ tìm hoài vẫn ko có cách khắc phục ,các huynh đệ giúp nhé ! thankC Code:
//----------------------sap xep -------------------- #include <conio.h> #include <stdio.h> void main() { //clrscr(); int i,j,vitri=0,mang[10]; int tam,min; for(i=0;i<10;i++) for(i=0;i<10;i++) { min=mang[i]; for(j=i+1;j<10;j++) if(mang[j]<=min) { min=mang[j]; vitri=j; } tam=min; mang[vitri]=mang[i]; mang[i]=tam; } for(i=0;i<10;i++) getch(); }
Sửa dòng :
lại thànhCode:for(i=0;i<10;i++)
Code:for(i=0;i<10-1;i++)
Thử sửa như sau xem nhé:
Code:for(i=0;i<9;i++) { min=i; for(j=i+1;j<10;j++) if(mang[j]<mang[min]) min=j; tam=mang[min]; mang[min]=mang[i]; mang[i]=tam; }
Code:for( i=0;i<9;i++) { min=i; for( j=i+1;j<10;j++) if(a[j]<a[min]) min=j; tam=a[i]; a[i]=a[min]; a[min]=tam; }
Đã được chỉnh sửa lần cuối bởi soda_chanhmuoi : 30-05-2007 lúc 01:36 PM.
hic cám ơn các bác ,đệ sửa được rồi ,ta phải gán vitri=i;
bài này hay ở chỗ vitri ,nó làm bài toán giải quyết nhanh hơn nó chỉ chay n*n vòng thôi ,(không biết đúng không nữa)Code:for(i=0;i<10;i++) { min=mang[i]; vitri=i; for(j=i+1;j<10;j++) if(mang[j]<=min) { min=mang[j]; vitri=j; } tam=min; mang[vitri]=mang[i]; mang[i]=tam; }
Đã được chỉnh sửa lần cuối bởi forever7040 : 30-05-2007 lúc 05:25 PM.
* Cái này là sắp xếp chọn thì phải: nguyên lý của nó là chia quá trình sắp xếp n phần tử thành n-1 lần tìm giá trị lớn nhất ( hoặc nhỏ nhất ) sau đó đảo giá trị đó cho phần tử đầu tiên của đoạn tìm lớn nhất nhỏ nhất đó. Trong đoạn code trên vitri chính là biến lưu giữ địa chỉ của phần tử đầu tiên của đoạn tìm kiếm lớn nhất đó.