欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

元素分界线

发布时间:2024/1/18 71 豆豆
生活随笔 收集整理的这篇文章主要介绍了 元素分界线 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述:以第一个元素为基准,将所有小于等于它的元素移动到该元素的前面,将所有大于它的元素移动到该元素的后面。

#include<stdio.h> #include"sqlist.cpp" /* 设计一个算法,以第一个元素为分界线, 将所有小于它的元素移到该元素的前面, 将所有大于它的元素移到该元素的后面。 */ void Move1(SqList *&L) {int i=0,j=L->length -1;//定义i和j两个指针,i指针指向第一个元素,j指针指向最后一个元素 ElemType temp;ElemType pivot=L->data [0];//以data[0]为基准 while(i<j)//从区间两端交替向中间扫描,直至i=j为止{while(j>i && L->data [j]>pivot)j--;//从右向左扫描,找一个小于等于pivot的元素while(i<j && L->data [i]<=pivot)i++;//从左向右扫描,找一个大于pivot的元素if(i<j)//L->data [i] <--> L->data [j]{temp = L->data [i];L->data [i] = L->data [j];L->data [j] = temp;}//以下输出每一趟的结果for(int k=0;k<L->length ;k++){printf("%2d",L->data [k]);} printf("\n");}//L->data [0] <--> L->data [j]temp = L->data [0];L->data [0] = L->data [j];L->data [j] = temp;printf("基准位置i=%d\n",i); }int main(int argc,char *argv[]) {SqList *L;ElemType a[10];printf("请输入10个正整数:");for(int m=0;m<10;m++)scanf("%d",&a[m]);CreateList(L,a,10);printf("L:");DisplayList(L);printf("执行移动运算\n");Move1(L);printf("L:");DisplayList(L);DestroyList(L);return 0; }

解法2:

#include<stdio.h> #include"sqlist.cpp" /* 设计一个算法,以第一个元素为分界线, 将所有小于它的元素移到该元素的前面, 将所有大于它的元素移到该元素的后面。 */ void Move2(SqList *&L) {int i=0,j=L->length -1;//定义i和j两个指针,i指针指向第一个元素,j指针指向最后一个元素 ElemType pivot=L->data [0];//以data[0]为基准 while(i<j)//从区间两端交替向中间扫描,直至i=j为止{while(j>i && L->data [j]>pivot)j--;//从右向左扫描,找一个小于等于pivot的元素L->data [i] = L->data [j];i++;while(i<j && L->data [i]<=pivot)i++;//从左向右扫描,找一个大于pivot的元素L->data [j] = L->data [i];j--;//以下输出每一趟的结果for(int k=0;k<L->length ;k++){printf("%2d",L->data [k]);} printf("\n");}L->data [i] = pivot;printf("基准位置i=%d\n",i); }int main(int argc,char *argv[]) {SqList *L;ElemType a[10];printf("请输入10个正整数:");for(int m=0;m<10;m++)scanf("%d",&a[m]);CreateList(L,a,10);printf("L:");DisplayList(L);printf("执行移动运算\n");Move2(L);printf("L:");DisplayList(L);DestroyList(L);return 0; }

 

 

总结

以上是生活随笔为你收集整理的元素分界线的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。