排序

来源:互联网 发布:类似于tumblr的软件 编辑:程序博客网 时间:2024/05/01 16:53

一:插入排序

原理:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

  

      基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。排序过程:

      i=1[10], 9, 55, 44, 33 , 100, 33, 2, 3, 8

      i=2[9, 10,] 55, 44, 33 , 100, 33, 2, 3, 8

      i=3[9, 10, 55], 44, 33 , 100, 33, 2, 3, 8

      i=4[9, 10, 44,55], 33 , 100, 33, 2, 3, 8

      i=5[9, 10, 33 ,44,55],  100, 33, 2, 3, 8

      i=6[9, 10, 33 ,44,55,  100, ]33, 2, 3, 8

      ......

      i=9[2, 3, 8, 9, 10, 33 ,33, 44,55,  100 ]  

直接插入排

序属于稳定的排序,时间复杂性为o(n^2),空间复杂度为O(1)。

代码如下:

void InsertSort(int arr[], int nLen)//插入排序
{
 for (int i=1; i<nLen; i++)
 {
  int nTemp = arr[i];
  for (int j=i; j>0 && nTemp < arr[j-1];)
  {
     arr[j] = arr[j-1];
     j--;
  }
  arr[j] = nTemp;
 }
}

 

 

二:冒泡排序:

原理:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

排序过程:

      i=1 ||9,10,44,33,55,33,2,3,8,100

      i=2 ||9, 10, 33 , 44, 33,2, 3,8,55, 100

      ......

 

代码:

void BubbleSort(int arr[], int nLen)
{
 BOOL bFlag = TRUE;//标志排序是否完成
 for (int i=0; i<nLen-1 && bFlag; i++)
 {
  bFlag = FALSE;
  for (int j=0; j<nLen-i-1; j++)
  {
   if(arr[j+1] < arr[j])
   {
    bFlag = TRUE;
    int nTemp = arr[j+1];
    arr[j+1] = arr[j];
    arr[j] = nTemp;
   }
  }
 }
}

三:快速排序:

原理:

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面。

第一轮排序过程:

i=1 ||8,9,3,2,10,100,33,33,44,55

 

代码:

int qSort(int arr[],int low,int high)
{
 int nKey = arr[low];

 while(low < high)
 {
  while(low < high && arr[high] >= nKey)//从右边找比key小的数
  {
   high--;
  }
  arr[low] = arr[high];

  while(low < high && arr[low] <= nKey)//从左边找比key大的数
  {
   low++;
  }
  arr[high] = arr[low];  
 }
 arr[low] = nKey;

 printMy(arr, 10, low);
 return low;
}

void QuickSort(int arr[], int nLow, int nHigh)
{
 if(nLow < nHigh)
 {
  int nKey = qSort(arr, nLow, nHigh);
  QuickSort(arr, nLow, nKey-1);
  QuickSort(arr, nKey + 1, nHigh);
 }
}

 

 

堆排序:待续!

原创粉丝点击