插入排序

插入排序的思想比较容易理解:使用相应变量将数组分成有序区和无序区,每次取出无序区中的第一个元素,插入到有序区的相应位置即可,随着有序区的长度逐渐增加,无序区长度逐渐减小,最后整个数组成有序状态。

#include<stdio.h>

int main()    {
    int a[] = {9,6,3,8,5,2,7,4,1} ;
    for(int i = 1 ; i < 9 ; i++)    
        if(a[i] < a[i-1])    {    // 判断无序区的第一个元素和有序区的最后一个元素的大小 
            int temp = a[i] ;    // 需要将 temp 插入到有序区的合适位置中 
            int j = i - 1 ;        
            for(; j >= 0 && a[j] > temp ; j--)    // 有序区中大于 temp 的元素都需要右移一位     
                a[j+1] = a[j] ;
            a[j+1] = temp ;            // temp 放到合适的位置中 
        }
    for(int i = 0 ; i < 9 ; i++)    
        printf("%d ",a[i]) ;
    printf("\n") ;
    return 0 ;
}

 

将数组中大于 temp 的元素右移过程中,可以使用相邻元素交换位置的方法实现元素右移:

#include<stdio.h>

void Swap(int &a , int &b)    {
    a = a ^ b ;
    b = a ^ b ;
    a = a ^ b ;
}

int main()    {
    int a[] = {9,6,3,8,5,2,7,4,1} ;
    for(int i = 1 ; i < 9 ; i++)    
        if(a[i] < a[i-1])    {    // 判断无序区的第一个元素和有序区的最后一个元素的大小          
            for(int j = i ; a[j-1] > a[j] ; j--)    // 相邻的两个元素比较大小 
                Swap(a[j],a[j-1]) ;                 // 如果相邻的两个元素,前面的大于后面的,交换两个元素的位置 
        }
    for(int i = 0 ; i < 9 ; i++)    
        printf("%d ",a[i]) ;
    printf("\n") ;
    return 0 ;
}

 

posted @ 2015-04-16 09:35  scott_dingg  阅读(138)  评论(0编辑  收藏  举报