数据结构(C数据)--快速排序

来源:互联网 发布:java葵花宝典下载 编辑:程序博客网 时间:2024/05/22 03:10

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 7

void swap(int *pa, int *pb)
{
    int temp = 0;
   temp = *pb;
   *pb = *pa;
   *pa = temp;
}

//快速排序的经典算法
int findpos(int *table_num, int length)
{
   int low = 0;
   int high = length-1;
   int temp = table_num[0];
   while(low < high)
   { 
         while(low<high && temp<table_num[high]) high--;
         swap(&table_num[low], &table_num[high]); 

          while(low<high && temp>table_num[low]) low++;
         swap(&table_num[low], &table_num[high]);   
 }

  table_num[low] = temp;
 
  return low;
}

//递归实现
void speed_order(int *table_num, int length)
{
      int pos = 0;
       int low = 0, high = length-1;
      if(low<high)
      {
          pos = findpos(table_num, length);
          speed_order(table_num, pos+1);
           speed_order(table_num+pos+1, length-pos-1);
      }

}

//输出
void traverse_array(int *table_num, int length)
{
       int i = 0;
        for(i=0; i<length; i++)
       {
              printf("Input %d: %d\n", i, table_num[i]);
       } 
}

//输入
void input_array(int *table_num, int length)
{
      int i = 0;
      memset(table_num, 0, length);
      for(i=0; i<length; i++)
      {
          printf("Input %d: \n", i);
         scanf("%d", &table_num[i]);
      }
}

 

int main()
{
       int table_num[SIZE];
       memset(table_num, 0, sizeof(table_num)/sizeof(int));

       input_array(table_num, sizeof(table_num)/sizeof(int));            //输入
      speed_order(table_num, sizeof(table_num)/sizeof(int));         //快速排序
       traverse_array(table_num, sizeof(table_num)/sizeof(int));         //遍历

      return 0;
}