码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2015-07-06 01:25:35      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

//将数组和它的长度封装成一个结构体
#define MAXSIZE 10  //由于r[0]用作哨兵,所以只能存放MAXSIZE-1个元素
typedef struct 
{
  int r[MAXSIZE]; //r[0]用作哨兵或临时变量
  int length;
}SqList;

void swap(SqList *L, int i, int j)
{
  int tmp = L->r[i];
  L->r[i] = L->r[j];
  L->r[j] = tmp;
}


 

一、冒泡排序

冒泡排序:是一种交换排序,两两比较相邻记录的关键字

//思路:从后面一个一个比较相邻两个记录,把最小的一步一步移到前面
void BubbleSort(SqList* L)
{
  int i, j;
  for(i=1; i<L->length; i++)
  {
    for(j=L->length-1; j>=i; j--)  //注意从后面往前排,达到比较相邻两个记录的目的
    {
      if(L->r[j] > L->r[j+1])
      {
        swap(L, j, j+1);
      }
    }
  }
}

 

二、快速排序

 

//采用分治法(Divide and Conquer)
int Partition(SqList *L, int low, int high)
{
int pivotKey = L->r[low];
while(low < high)
{
while(low<high && pivotKey <= L->r[high])
high--;
swap(L, low, high);

while(low<high && pivotKey >= L->r[low])
low++;
swap(L, low, high);
}
return low;
}

void QSort(SqList *L, int low, int high)
{
int pivot;
if(low < high)
{
pivot = Partition(L, low, high);

QSort(L, low, pivot-1);
QSort(L, pivot+1, high);
}

}


void QuickSort(SqList *L)
{
QSort(L, 1, L->length);
}

 

排序算法

标签:

原文地址:http://www.cnblogs.com/shih/p/4623310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!