zoukankan      html  css  js  c++  java
  • 插入排序

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

    #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("
    ") ;
        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("
    ") ;
        return 0 ;
    }
  • 相关阅读:
    经典入门_排序
    经典入门_贪心算法
    经典入门_Hash的应用
    经典入门_排序
    uva 839
    uva 327
    uva 699
    uva 712
    uva 297
    uva 548
  • 原文地址:https://www.cnblogs.com/scottdinggo/p/4431093.html
Copyright © 2011-2022 走看看