1. 冒泡排序
对1,5,3,4,2,9,6,8,7进行从小到大排序。
第1轮
8和7进行比较,8>7 位置交换 153429678
6和7进行比较,6<7 位置不变 153428678
9和6进行比较,9>6 位置交换 153426978
2和6进行比较,2<6 位置不变 153426978
4和2进行比较,4>2 位置交换 153246978
3和2进行比较,3>2 位置交换 152346978
5和2进行比较,5>2 位置交换 125346978
1和2进行比较,1<2 位置不变 125346978
第2轮
7和8进行比较,7<8 位置不变 125346978
9和7进行比较,9>7 位置交换 125346798
6和7进行比较,6<7 位置不变 125346798
4和6进行比较,4<6 位置不变 125346798
3和4进行比较,3<4 位置不变 125346798
5和3进行比较,5>3 位置交换 123546798
2和3进行比较,2<3 位置不变 123546798
第3轮
…
code
for(j=0;j<N;j++)
{
for(k=N-1;k>j;k--)
{
if(value_buffer[k]<value_buffer[k-1])
{
temp = value_buffer[k];
value_buffer[k] = value_buffer[k-1];
value_buffer[k-1] = temp;
}
}
}
2. 归并排序
对5,1,3,4,2,9,8,7进行从小到大排序。
拆分
5134 2987
拆分
51 34 29 87
排序
15 34 29 78
15 34的1和3比较取出1
5 34的5和3比较取出3
5 4的5和4进行比较取出4
…
3. 选择排序
以5个无序的数据为例:56 12 80 91 20
第1轮
12和56比较,12<56 最小值索引为1
80和12比较,80>12 最小值索引为1
91和12比较,91>12 最小值索引为1
20和12比较,20>12 最小值索引为1
56和最小索引值交换顺序
第2轮
80和56比较,80>56 最小值索引为1
91和56比较,91>56 最小值索引为1
20和56比较,20<56 最小值索引为4
56和21最小索引值交换顺序
…
code
void SelectionSort(int* pDataArray, int iDataNum)
{
for (int i = 0; i < iDataNum - 1; i++) //从第一个位置开始
{
int index = i;
for (int j = i + 1; j < iDataNum; j++) //寻找最小的数据索引
if (pDataArray[j] < pDataArray[index])
index = j;
if (index != i) //如果最小数位置变化则交换
DataSwap(&pDataArray[index], &pDataArray[i]);
}
}
4. 插入排序
以5个无序的数据为例:65 27 59 64 58
第1轮
65和27比较 交换顺序 27 65 59 64 58
第2轮
65和59比较 交换顺序 27 59 65 64 58
27和59比较 位置不变 27 59 65 64 58
第三轮
…
code
/********************************************************
*函数名称:InsertSort
*参数说明:pDataArray 无序数组;
* iDataNum为无序数据个数
*说明: 插入排序
*********************************************************/
void InsertSort(int* pDataArray, int iDataNum)
{
for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入
{
int j = i - 1;
int temp = pDataArray[i]; //记录要插入的数据
while (j >= 0 && pDataArray[j] > temp) //从后向前,找到比其小的数的位置
{
pDataArray[j+1] = pDataArray[j]; //向后挪动
j--;
}
if (j != i - 1) //存在比其小的数
pDataArray[j+1] = temp;
}
}