郝斌版《数据结构》学习笔记
时间: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],是返回位置,而不是元素的值。
}