C语言的几种排序(一)

C语言的几种排序(一)

一、冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
时间复杂度 O(n^2)
最好:1 2 3 4 5 6 O(n)
最坏:23 68 45 66 O(n^2)
空间复杂度 O(1)
稳定性 冒泡排序是一个稳定排序
C语言的几种排序(一)_第1张图片

void BubbleSort(int *arr,int len)
{
    for(int i=0;iarr[j+1])
              {
                   tmp=arr[j+1];
                   arr[j+1]=arr[j];
                   arr[j]=tmp;
              }
         }
         if(!swap)
         {
                break;
         }
    }
}

二、选择排序
从待排序数字,后面找到比待排序数字小的数字就发生交换一直到整个序列遍历完
时间复杂度: O(n^2)
有序:O(n^2)
无序:O(n^2)
空间复杂度:O(1)
稳定性:不稳定排序
C语言的几种排序(一)_第2张图片

void SelectSort(int *arr,int len)
{
      for(int i=0;iarr[j])
                {
                     tmp=arr[j];
                     arr[j]=arr[i];
                     arr[i]=tmp;
                }
           }
      }
}

三、直接插入排序
第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去。
时间复杂度: O(n^2)
有序:O(n) 越有序 越快
无序:O(n^2)
空间复杂度:O(1)
稳定性:稳定排序
C语言的几种排序(一)_第3张图片

void InsertSort(int *arr,int len)
{
      for(int i=1;itmp)
               {
                    arr[j+1] = arr[j];
               }
               else
                 {
                      break;
                 }
             arr[j+1]=tmp;
          }
      }
}

四、Shell(希尔)排序
分组的思想,组内进行直接插入排序
不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。每次比较指定间距的两个数据项,若左边的值小于右边的值,则交换它们的位置。
时间复杂度: O(n^2)
最好:O(n)
最坏:O(n^2)
空间复杂度:O(1)
稳定性:不稳定排序
C语言的几种排序(一)_第4张图片

void Shell(int *arr,int len,int gap)
{
     for(int i = gap;i < len;i ++)
     {
          int tmp = arr[i];
          int j = 0;
          for(j = i-gap;j >= 0;j = j-gap)
          {
              if(arr[j] > tmp)
              {
                    arr[j+gap] = arr[j];
              }
              else
              {
                   break;
              }
          }
         arr[j+gap] = tmp;
     }
}
void ShellSort(int *arr,int len)
{
     int drr[] = {5,3,1};
     int lend = sizeof(drr)/sizeof(drr[0]);
     for(int i = 0;i < lend;i++)
     {
          Shell(arr,len,drr[i]);
     }
}

你可能感兴趣的:(C语言的几种排序(一))