写了个快速排序,但是功能没实现,求指教

l564400632 2012-10-21 10:16:06
写了个快速排序,但是功能没实现,求指教
#include<iostream.h>//快速排序,个人理解首先确定转轴记录,转轴前面的都是比转轴小的数,转轴后面的都是比转轴大的数,
//注意对数据的挖出及填充,当low=high时,将位置赋予转轴值,完成一次快排,然后采用分治法,对这两部分
//再进行快排,直到low=high.(可以采用递归),非递归的想不起来。
#define max_list 10
struct list
{
int a[max_list];
int length;
};
//将数组进行一分为二的操作//这是一次换分
int Partition(list &L,int low,int high)
{
L.a[0]=L.a[low];//将数组首元素作为转轴值
int pivotkey=L.a[low];//记录转轴值,为下面循环做准备
while(low<high)
{
while(low<high && L.a[high]>=pivotkey)//将比转轴值小的记录移到左端
{high--;}
L.a[low]=L.a[high];
while(low<high && L.a[low]<=pivotkey)
{low++;}
L.a[high]=L.a[low];
}
L.a[low]=L.a[0];//将转轴值赋值到位
return low;//并将转轴位置返回,以便进行下次排序
}
//下面采用递归形式进行对数组的完全排序
void QSort(list &L,int low,int high )
{
if(low<high)
{
int pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);//对低的序列进行排序
QSort(L,pivotloc+1,high);//对高的序列进行排序
}
}
void QuickSort(list &L)
{
QSort(L,1,L.length);//对数据的调用
}

void main()
{
list b;
b.length=0;
int i;
cout<<"请输入10个数"<<endl;
for( i=0;i<10;i++)
{
cin>>b.a[i];
b.length++;
}
QuickSort(b);
cout<<"排序后数列:"<<endl;
for(i=0;i<10;i++)
cout<<b.a[i]<<" ";
}
...全文
116 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
慧钦 2012-10-21
  • 打赏
  • 举报
回复
主要问题出现在数组下标上.
你用了L.a[0]作用辅助存储,但在主函数中还用它来作一般元素的存储,所以就会出问题,
主要修改地方有三个
1.#define max_list 11 // 1.表大小加1
2.for( i=1;i<=10;i++) // 下标从1开始
{
cin>>b.a[i];
b.length++;
}
QuickSort(b);
cout<<"排序后数列:"<<endl;
3. for(i=1;i<= 10;i++) // 下标从1开始
cout<<b.a[i]<<" ";
修改后如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;

#define max_list 11 // 1.表大小加1
struct list
{
int a[max_list];
int length;
};
//将数组进行一分为二的操作//这是一次换分
int Partition(list &L,int low,int high)
{
L.a[0]=L.a[low];//将数组首元素作为转轴值
int pivotkey=L.a[low];//记录转轴值,为下面循环做准备
while(low<high)
{
while(low<high && L.a[high]>=pivotkey)//将比转轴值小的记录移到左端
{high--;}
L.a[low]=L.a[high];
while(low<high && L.a[low]<=pivotkey)
{low++;}
L.a[high]=L.a[low];
}
L.a[low]=L.a[0];//将转轴值赋值到位
return low;//并将转轴位置返回,以便进行下次排序
}
//下面采用递归形式进行对数组的完全排序
void QSort(list &L,int low,int high )
{
if(low<high)
{
int pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);//对低的序列进行排序
QSort(L,pivotloc+1,high);//对高的序列进行排序
}
}
void QuickSort(list &L)
{
QSort(L,1,L.length);//对数据的调用
}

int main()
{
list b;
b.length=0;
int i;
cout<<"请输入10个数"<<endl;
for( i=1;i<=10;i++) // 下标从1开始
{
cin>>b.a[i];
b.length++;
}
QuickSort(b);
cout<<"排序后数列:"<<endl;
for(i=1;i<= 10;i++) // 下标从1开始
cout<<b.a[i]<<" ";
return 0;
}


33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧