要实现动态数组排序,并且区分奇数、偶数,需要将数据采用链表的形式存储。举例如下:
假如数组int[] arr={5,4,1,3,2,7,6,9,8,10}
排序后: 奇数:1 3 5 7 9
偶数:2,4,6,8,10
代码如下
LinkList odd;
LinkList even;
@Test
public void ts(){
int[] arr={5,4,1,3,2,7,6,9,8,10};
for(int i=0;i<arr.length;i++){
if(arr[i]%2==0) {
if (even==null){
even=CreatLinkList(arr[i]);
}else {
insertList(even, arr[i]);
}
}else {
if (odd==null){
odd=CreatLinkList(arr[i]);
}else {
insertList(odd, arr[i]);
}
}
}
dynamicSort(even); //动态数组排序
dynamicSort(odd);
System.out.println();
System.out.println("对该数组排序后,得到的偶数结果如下:");
while(even!=null){
System.out.print(even.data+" ");
even=even.next;
}
System.out.println("对该数组排序后,得到的奇数结果如下:");
while(odd!=null){
System.out.print(odd.data+" ");
odd=odd.next;
}
}
//链表结构
static class LinkList{
int data; //数据域
LinkList next; //指针域
}
//创建链表
static LinkList CreatLinkList(int ch){
LinkList list = null;
list = new LinkList();
list.data = ch;
list.next = null;
return list;
}
//插入结点
static void insertList(LinkList list,int e){
LinkList p = new LinkList();
p.data=e;
if(list==null){
list=p;
p.next=null;
}else{
p.next=list.next;
list.next=p;
}
}
//动态数组排序
static void dynamicSort(LinkList p){
LinkList q = p;
int i,j,k=0;
int temp;
while(q!=null){
k++;
q=q.next;
}
q=p;
for(i=0;i<k-1;i++){
for(j=0;j<k-i-1;j++){
if(q.data>q.next.data){
temp=q.data;
q.data=q.next.data;
q.next.data=temp;
}
q=q.next;
}
q=p;
}
}
网友评论