#include <iostream.h>
#include <stdlib.h>
int main()
{
int*n,*head;
int i,j,temp;
int k=0;//记录当前数组长度
int MAX=3;//设置数组个数
n=(int*)calloc(MAX,sizeof(int));//创建动态数组
head=n;//记录不用增加动态数组长度时的头指针
cin>>i;//输入数组元素的值
while(i!=0&&k<MAX)
{
*n=i;//给当前数组元素赋值
k++;//数组长度加一
cin>>i;//输入下一个数组元素的值
if(k==MAX)//数组已满
{
MAX=MAX+3;//重设数组长度
n=(int*)realloc(n,(MAX)*sizeof(int));//增加数组长度(调试时到这一句就中断)
head=n;//记录新动态数组头指针
n=n+(MAX-4);//返回已赋好值的那个节点
}
n++;//数组元素下移一位
}
n=NULL;//把最后多下移一位的值悬空
n=head;//返回头指针
//下面的程序正确,数组不需要增加长度时就正确,一增加就错误
for(i=0;i<k-1;i++) { for(j=i+1;j<k;j++) { if(*n>*(n+1)) { temp=*n; *n=*(n+1); *(n+1)=temp; } n++; } n=head; } n=head; for(i=0;i<k;i++) { cout<<*n<<"\t"; n++; } n=head; free(n); return 0; }
是实现不了吗?还是觉得方法不好?你这样用n*2的空间来实现冒泡排序没有必要.
你可以去学下怎么用堆排序.
要冒泡排序的话最好还是双向链表.这样节点之间交换起来会很方便
实现不了
n=(int*)realloc(head,(MAX)*sizeof(int));