A quick sort algorithm code sharing

  • 2020-04-02 02:09:28
  • OfStack



#include <stdio.h>
#include <string.h>
typedef struct _student
{
 int id;
 char name[30];
}student,*pStudent;
student students[20] =
{
 {13," The fox gold "},{15," Ten niangs "},{8," The gourd Eva "},{4," Pleasant goat "},
 {14," Jingle cats "},{18," The Monkey King "},{3," gulliver "},{6," Coffee cat "},
 {19," Pig eight quit "},{11," The programmer "},{5," Robinson "},{9," tuna "},
 {10," careless "},{12," Week star "},{1," Wolffy "},{2," Donald Duck "},
 {20," False gentleman "},{16," In jun "},{7," xiao "},{17," Jia baoyu "},
};
//Students [] is an array to sort, and length is the number of elements in the students array
void quickSort(student students[],int length)
{
 int i,j,flag = students[0].id;
 student stutemp;
 int t;
 if(length>1)
 {
  for(t=0;t<length;t++)
  {
   printf("%d   ",students[t].id);
  }
  printf("n");
  //Select the split point for the partition
  for(i=0,j=length-1;i<j;)
  {
   for(;students[i].id<flag;i++);
   for(;students[j].id>flag;j--);
   stutemp.id = students[j].id;
   strcpy(stutemp.name,students[j].name);
   students[j].id = students[i].id;
   strcpy(students[j].name,students[i].name);
   students[i].id = stutemp.id;
   strcpy(students[i].name,stutemp.name);
  }
  //Print sort process
  for(t=0;t<length;t++)
  {
   printf("%d   ",students[t].id);
  }
  printf("---- After ordering n----------------------------------- Axis: %d  Central axis subscript: %dn",flag,j);
  //Partition and recursively call quickSort on the partition, operating in the original array space
  quickSort(&students[0],j+1);
  quickSort(&students[j+1],length-j-1);
 }
}
int main()
{
 int i;
 //Pre-sort printing
 printf(" Before ordering: n");
 for(i=0;i<20;i++)
 {
  printf("%d  %st",students[i].id,students[i].name);
  if(!((i+1)%5))
  {
   printf("n");
  }
 }
 quickSort(students,20);
 //Sort print
 printf("__________________________________________________________________n After the order: n");
 for(i=0;i<20;i++)
 {
  printf("%d  %st",students[i].id,students[i].name);
  if(!((i+1)%5))
  {
   printf("n");
  }
 }
 return 0;
}


Related articles: