算法设计题目二 冒泡排序改进

来源:互联网 发布:知恩中学美术班好吗 编辑:程序博客网 时间:2024/06/06 06:37

/*说是改进,,其实就是奇偶排序,老师在逗我们。

改进冒泡排序,试编写一个程序,对一个待排序的数据元素集合进行奇偶转换排序。(

奇偶排序时指第一趟对所有奇数的i,将a【i】与a【i+1】进行比较,第二趟是对所有偶数的i,将a【i】与a【i+1】进行比较,每次比较时,若a【i】>a【i+1】,则将二者交换,重复上述俩趟交换进行的过程,直到整个数据表有序。)*/



#include "stdio.h"

#include "malloc.h"

#define LIST_SIZE 20

 

typedef struct{

         intr[LIST_SIZE];

         intlength;

}SqeList;

 

 SqeList *SqLset(){//建立表

        SqeList *L;

        int i=0,a;

        L = ( SqeList *)malloc(sizeof(SqeList));

        printf("请输入一个整形的待排数列,输入0时结束!");

        scanf("%d",&a);

        L->length = 0;

        while(a!=0){

                 L->r[i]=a;

                 L->length++;

                 i++;

                 if(L->length == LIST_SIZE-1)break;

                 scanf("%d",&a);

        }

        return L;

 }

 

SqeList * BubbleSort(SqeList *L)

 {

        int i,j;

        int x;

        bool flag=0;

 

       

        while(!flag){//冒泡排序

                 flag=1;

                

                 for(i=1;i<L->length-1;i+=2)

                 if(L->r[i]>L->r[i+1]){

                           x=L->r[i];

                           L->r[i]=L->r[i+1];

                           L->r[i+1]=x;

                           flag=0;

                 }

           for(j=0;j<L->length-1;j+=2)

                 if(L->r[j]>L->r[j+1]){

                           x=L->r[j];

                           L->r[j]=L->r[j+1];

                           L->r[j+1]=x;

                           flag=0;

                 }

        }

        return L;

 }

 

 intmain(){

        int i;

        SqeList *L;

        L=SqLset();

       

        L=BubbleSort(L);

        printf("\n排序后数据为:");

        for(i=0;i<L->length;i++)

        printf("%4d",L->r[i]);

        return 0;

 }

运行结果:

 


0 0
原创粉丝点击