> 文章列表 > c++简单的插入排序

c++简单的插入排序

c++简单的插入排序

#include <stdio.h>
//首先我们需要知道原理 
//插入排序 是在前部分是有序的情况下 将后部分插入到前部分
//如果一开始就是乱序的 我们可以直接把第一个数据看成是有序的 然后循环插入即可
//经了解 插入排序有一个外循环和一个内循环 
//外循环控制一共循环的次数
//内循环控制找到插入的位置 
//下面是原始插入排序和其变种 
void insert_sort1(int data[],int n)
{
    int i,j,swap_value;
    for(i = 1 ; i < n ; i++)
    {
        swap_value = data[i];
        for(j = 0 ; j < i ; j++)
            if(data[j] > data[i]) break; //找到插入的位置
            
            
        //如果插入数值 那么之后的所有数值的索引都要加1
        //那我们可以用循环把每个数值往后移动一个索引    
        for(int t = i ; t > j ; t--)
        {
            //这里很巧妙 这时候你要插入的就是data[t]=data[i]的数据 把data[i]前面一直到data[j]的位置全部都向后移动一个索引
            //这样就不会影响到整个数组了  
            data[t] = data[t-1];
        }
        //这时候就已经把原来的data[j]的值的位置换成了data[j+1]的位置了 
        //所以 这个时候的data[j]里面是没有值的 正好给data[i]插入进去 
        data[j] = swap_value; 
    }        

//变种就好理解多了  原理就是首先让有序数据的最后一个 无序数据的第一个比较 如果有序的元素比它大 那么就调换
//不过不比他大 那就一直往前循环下去   
void insert_sort2(int data[],int n)
{
    int i,j,swap_value;
    for(i = 1 ; i < n ; i++)
    {
        for(j = i ; j > 0  ; j--)
        {
            if(data[j] < data[j-1])
            {
                swap_value = data[j];
                data[j] = data[j-1];
                data[j-1] = swap_value;
            }
        }
    }
}
 

ISO9000网