您的位置:首页 > 其它

各种排序算法思想

2016-03-21 13:05 218 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: