数据结构 - 排序

郝斌版《数据结构》学习笔记
时间:2015.08.31 - 2015.09.05


冒泡(升序,12比,大放后面,再23比,...,直至最大的在最后面)    
插入(2,3,4,依次插入值,保证插入值后的序列为有序的)    
选择(后面所有的最小值依次排到最前)    
快速排序    
归并排序(22排,44排,88排...)

排序算法标准:时间,空间,稳定性

排序和查找的关系:
        排序是查找的前提,排序是重点


快速排序(快排,分成两半,递归):

# include <stdio.h>

void QuickSort(int *, int, int);
int FindPos(int * a, int low, int high);

int main(void)
{
 int a[6] = {2, 1, 0, 5, 4, 3};
 int i;

 QuickSort(a, 0, 5); //第二个参数表示第一个元素的下标,第三个参数表示最后元素的下标

 for (i=0; i<6; ++i)
  printf("%d ", a[i]);
 printf("\n");

 return 0;
}

void QuickSort(int * a, int low, int high)
{
 int pos;

 if (low < high)
 {
  pos = FindPos(a, low, high); //找到第一个元素经过一遍排序后的位置
  QuickSort(a, low, pos-1); //该元素的左边进行快排
  QuickSort(a, pos+1, high); //该元素的右边进行快排
 }
}

int FindPos(int * a, int low, int high)
{
 int val = a[low];

 while (low < high)
 {
  while (low<high && a[high]>=val)
   --high;
  a[low] = a[high];

  while (low<high && a[low]<=val)
   ++low;
  a[high] = a[low];
 }

 a[low] = val;

 return high; //或return low, 但不能改为val或者a[low],a[high],是返回位置,而不是元素的值。
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值