各种排序算法思想

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;  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值