A.1顺序链表习题——元素的排序

代码

        

#include<stdio.h>
#include<stdlib.h>
#define Max 10
//创建一个顺序表,将其中的数据排序,将小于0的数据放在大于零数据的前面 
typedef struct node{
    int data[Max];
    int lenght;
}Node;
void swap(int *a, int *b)
{
    int *t=a;
    a=b;
    b=t;
}
void InitNode(Node &L)                                            //初始化 
{    
    L.lenght =0;
    printf("请输入元素:");
    int i;
    for(i=0; i < Max; i++){
        scanf("%d", &L.data [i]);
        L.lenght ++;
    } 
}
int DisNode(Node &L)                                            //打印 
{
    if(L.lenght  <= 0) return 0;
    while(L.lenght --){
        printf("%d ",L.data [Max-L.lenght-1 ]);
    }
    
    return 0;
}
int quicksort(Node &L,int begin,int end)                        //快速排序 
{    if(begin > end) return 0;                                    //作为循环结束条件 
    int left=begin;
    int right=end;
    int temp=L.data [begin];
    while(left != right){                                        //如果左右不相等,循环 
        while(L.data[right] >= temp&& left < right)                //先从右边开始查找 
        {
            right--;                                            //指针前移 
        }
        while(L.data[left] <= temp&& left < right)                //再从左边开始查找 
        {
            left++;                                                //指针后移 
        }
        if(right > left)                                        //此时的两个下标值均为不满足条件的,交换 
        {
            int t=L.data [left];
            L.data [left]=L.data [right];
            L.data [right]=t;
        }
        
    }
    L.data [begin]=L.data [left];                                //将对比点和小于对比点交换 
    L.data [left]=temp;
    quicksort(L,begin, left-1);                                    //递归左右部分 
    quicksort(L, left+1,end);
}

int main()
{
    Node L;
    InitNode(L);
    quicksort(L,0,10);
    DisNode(L);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值