• 冒泡排序法---排序算法(三)


    1.排序原理

    每次交换将最大的移到顶端,将像是水泡一样往上冒,所以将冒泡排序
    例如:7 6 5 4 3 2 1
    第一次 7>6所以交换7和6得6 7 5 4 3 2 1
    第二次 7>5所以交换7和5得6 5 7 4 3 2 1
    第三次 7>4所以交换7和4得6 5 4 7 3 2 1
    第四次 7>3所以交换7和3得6 5 4 3 7 2 1
            第五次 7>2所以交换7和2得6 5 4 3 2 7 1
            第六次 7>1所以交换7和1得6 5 4 3 2 1 7
    以上为一次冒泡排序,将最大的7冒泡到顶端
    然后再对 6 5 4 3 2 1进行第二次冒泡排序 得5 4 3 2 1 6
    然后再对 5 4 3 2 1进行第三次冒泡排序行4 3 2 1 5
    然后 再对4 3 2 1进行第四次冒泡排序行3 2 1 4
    然后再对3 2 1 进行第五次冒泡排序得2 1 3
    最后对2 1 进行第六次冒泡排序得1 2 
    整个排序结果得:1 2 3 4 5 6 7


    2.排序代码

    #include <stdio.h>
    
    void printArray(int a[],int size){  
        printf("数组为:[%d] ",a[0]);  
        for (int i=1;i<size;i++)  
        {  
            printf(" %d ",a[i]);  
        }  
        printf("
    ");  
    }
    void main()
    {
    	//a[0]为监视哨
    	int a[8]={0,7,6,5,4,3,2,1}; 
    	int len=8;
    	for (int i=1;i<len;i++)
    	{
    		
    		for (int j=2;j<=len-i;j++)
    		{
    			printf(" i=%d j=%d ",i,j);
    			if (a[j-1]>a[j])
    			{
    				printf("[%d]交换[%d]",a[j-1],a[j]);
    				a[0]=a[j];
    				a[j]=a[j-1];
    				a[j-1]=a[0];
    			}
    			printArray(a,len);
    		}
    	}
    	printArray(a,len);
    }
    
    


    3.排序结果

     i=1 j=2 [7]交换[6]数组为:[6]  6  7  5  4  3  2  1
     i=1 j=3 [7]交换[5]数组为:[5]  6  5  7  4  3  2  1
     i=1 j=4 [7]交换[4]数组为:[4]  6  5  4  7  3  2  1
     i=1 j=5 [7]交换[3]数组为:[3]  6  5  4  3  7  2  1
     i=1 j=6 [7]交换[2]数组为:[2]  6  5  4  3  2  7  1
     i=1 j=7 [7]交换[1]数组为:[1]  6  5  4  3  2  1  7
     i=2 j=2 [6]交换[5]数组为:[5]  5  6  4  3  2  1  7
     i=2 j=3 [6]交换[4]数组为:[4]  5  4  6  3  2  1  7
     i=2 j=4 [6]交换[3]数组为:[3]  5  4  3  6  2  1  7
     i=2 j=5 [6]交换[2]数组为:[2]  5  4  3  2  6  1  7
     i=2 j=6 [6]交换[1]数组为:[1]  5  4  3  2  1  6  7
     i=3 j=2 [5]交换[4]数组为:[4]  4  5  3  2  1  6  7
     i=3 j=3 [5]交换[3]数组为:[3]  4  3  5  2  1  6  7
     i=3 j=4 [5]交换[2]数组为:[2]  4  3  2  5  1  6  7
     i=3 j=5 [5]交换[1]数组为:[1]  4  3  2  1  5  6  7
     i=4 j=2 [4]交换[3]数组为:[3]  3  4  2  1  5  6  7
     i=4 j=3 [4]交换[2]数组为:[2]  3  2  4  1  5  6  7
     i=4 j=4 [4]交换[1]数组为:[1]  3  2  1  4  5  6  7
     i=5 j=2 [3]交换[2]数组为:[2]  2  3  1  4  5  6  7
     i=5 j=3 [3]交换[1]数组为:[1]  2  1  3  4  5  6  7
     i=6 j=2 [2]交换[1]数组为:[1]  1  2  3  4  5  6  7
    数组为:[1]  1  2  3  4  5  6  7
    
    




  • 相关阅读:
    foj 2111 Problem 2111 Min Number
    hdoj 1175 连连看
    poj 2377 Bad Cowtractors
    poj 3666 Making the Grade
    2018华南理工大学程序设计竞赛 H-对称与反对称
    hdoj 4293 Groups
    FOJ Problem 2273 Triangles
    poj 3411 Paid Roads
    Codeforces 235A. LCM Challenge
    离散对数二连 poj 2417 Discrete Logging & HDU 2815 Mod Tree
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023475.html
Copyright © 2020-2023  润新知