排序之交换排序学习总结

交换排序:即对两个数进行交换位置而进行排序。


1.冒泡排序

思想:(以从小到大排列为例)从后向前,相邻元素两两进行比较,如果A[i]

void BubbleSort(ElemType A[],int n)
{
     for(int i=1;i<=n-1;i++)    //排序趟数
         bool flag=false;
         for(int j=n-1;j>i-1;j--)
         {
              if(A[j]

分析:
①空间复杂度:O(1);
②时间复杂度:
好——原列有序:O(n)
比较次数:n-1(只进行一趟两两比较)
坏——原列逆序:O(n^2)
比较次数:n-1(第一趟)+n-2+…+1=n(n-1)/2
稳定

2.快速排序

思想图解:
排序之交换排序学习总结_第1张图片
划分算法:通常以一个序列的第一个元素为基准元素进行划分;通过划分算法可以找到基准元素在序列中的最终位置(左边元素

int  Partition(ElemType A[],int low,int high)
{
  int pivotpos;//基准元素位置
  ElemType pivot=A[low];    //将序列中第一个元素设为基准
  while(lowpivot)
        --high;
      A[low]=A[high];  //将比基准小的元素移到左边
      while(A[low]
void QuickSort(ElemType A[],int low,int high)
{
if(low

分析:
①空间复杂度:由于采用了递归的方式,与递归调用的最大深度一致。
好——O(log2N);坏——O(N);平均——O(log2N)
②时间复杂度:与划分是否对称有关。
坏:最大程度的不对称(顺序或逆序)——O(n2)
好:对称——O(nlog2n)
③不稳定
④快排是内排中性能最优的算法。

你可能感兴趣的:(数据结构)