排序
来源:互联网 发布:类似于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);
}
}
堆排序:待续!
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- Windows2003 IIS6.0启用Gzip功能
- list.h中宏list_entry宏的解析与应用
- 关于static之一二三
- 使用Application和SessionID实现在线用户列表统计
- 三维空间里一个点绕矢量旋转后的新的点的坐标
- 排序
- Qt-4.6动画Animation快速入门三字决
- 手机常用术语英文翻译
- Python 数据库技术内训资料
- 入門 04 - 第一個Spring程式。
- commons-validator.jar校验
- STL 之 算法
- SEMAT(软件工程方法和理论)
- ExtJS Grid Tooltip