ลองรับใน ภาษา C++ 1998 ขึ้นไป
อยู่ในชุด #include<algorithm> ใน namespace std
รูปแบบการประกาศ
sort(ตัวชี้แรก,ตัวชี้สุดท้าย)
หรือ
sort(ตัวชี้แรก,ตัวชี้สุดท้าย,วิธีการเรียง)
เช่น
int a[]={7,2,1,9,3,7,8,5,1,2};
sort(a,a+10);
//ค่าในarray a จะถูกเรียงลำดับจากน้อยไปมาก
แต่ถ้าหากเรียงจากมากไปน้อย หรือเรียงแบบอื่นๆ ก็สามารถทำหนดวิธีการเรียงโดย
bool compare(int a,int b)
{
return a>b;
}
int main(){
int a[]={7,2,1,9,3,7,8,5,1,2};
sort(a,a+10,compare);
}
//ค่าในarray a จะถูกเรียงลำดับจากมากไปน้อย
หากเป็น data structer ไม่ว่าจะเป็น class หรือ struct ก็สามารถ กำหนดได้เหมือนกัน
#include<stdio.h>
#include<algorithm>
using namespace std;
struct item{
int value;
float floating;
};
bool compare(struct item a,struct item b)
{
return a.value<b .value;
}
int main(){
int i;
struct item box[10];
for(i=0;i<10;i++){
scanf("%d %f",&box[i].value,&box[i].floating);
}
sort(box,box+10,compare);
// จะเรียงลำดับ array box จากน้อยไปมาก ตามค่าของ valu
}
for(i=0;i<10;i++){
printf("\n%d %f",box[i].value,box[i].floating);
}
ทั้งนี้ยัง สามารถใช้ได้กับอีกหลายโครงสร้าง เช่น ใช้กับ vector เป็นต้น
vectorint vex; sort(vex.begin(),vex.end()); //หรือแม้แต่ vector ที่เก็บข้อมูลเป็น node หรือ เป็น class ก็สามารถ ทำได้แต่ต้องสร้าง function compare ให้ตัวอย่างเต็ม เพื่อการนำไปใช้
#include<stdio.h>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
return a>b;
}
int main(){
int a[]={7,2,1,9,3,7,8,5,1,2};
sort(a,a+10,compare);
int i;
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
}
ขอบคุณครับ
ตอบลบ