یکی از مشکلات استفاده از تابع sort
برای مرتب کردن عناصر این است که اگر عناصر ما از ساختاری باشند که دادههای زیادی در آن ذخیره شده، عملیّات مرتب کردن کند میشود، چون یکی از اعمالی که در تابع sort
انجام میشود،
جابهجا کردن دو عنصر است؛ موقعی که تعداد بایتهای هر کدام از اشیایی که از ساختار
تعریف کردهایم زیاد باشد این عمل زیاد طول میکشد، یک روش خوب این است که اشارهگرهایی به اشیا نگه داریم، سپس یک تابع برای مقایسهی اشیایی که دو اشارهگر به آنها اشاره میکنند بنویسیم و از آن برای مرتب کردن اشیا استفاده کنیم.
ساختار زیر را در نظر بگیرید:
struct student{ double height, mean; int weight,ncourse; };
متغیّر height
نشاندهندهی قد یک دانشجو، weight
نشاندهندهی وزن یک دانشجو، mean
نشاندهندهی معدل یک دانشجو و ncourse
نشاندهندهی تعداد درسهاییاست که او تا بهحال گذرانده است.
برنامهای بنویسید که اعمال زیر را انجام دهد.
heap
بسازد. student
تعریف کنید و اشارهگر به $n$ دانشجو را در آن ذخیره کنید. student
تعریف کنید، این تابع بایستی بگونهای باشد که در پایان اشارهگر به دانشجوها ابتدا بر حسب معدلهاشان و در صورت تساوی معدّلها بر حسب تعداد درسهای گذرانده شده توسط آنها مرتب شده باشند. sort
مرتب کنید، سپس با استفاده از ترتیب اشارهگرهای موجود در $b$، اشیای موجود در آرایهی $a$ را در زمان $O(n)$ مرتب کنید، شما میتوانید برای انجام این کار از حافظهی اضافی حداکثر $O(n)$ استفاده کنید.