| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:非递归的快速排序问题
只看楼主 加入收藏
fireice11
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2010-10-26
结帖率:66.67%
收藏
已结贴  问题点数:15 回复次数:1 
非递归的快速排序问题
一个字符串数组,
abd20ef
cf3084lg
egi66nnnpk
gop52896 hi
pfr122f
ope481pk
adc681p6
vbg32 4lo
asd34f
bgh61lo
bgh20pol,
fgh269g
要求对每个字符串的4、5位进行排序,然后输出排序后的字符串,用非递归的快速排序实现。代码如下:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//#include <malloc.h>
#define LENGTH 12


  void swap(int array[], int low, int high,char str[][100])
{
int temp;
char tempa[100];

temp = array[low];
array[low] = array[high];
array[high] = temp;
strcpy(tempa,str[low]);
strcpy(str[low],str[high]);
strcpy(str[high],tempa);
}

int partition(int array[], int low, int high,char str[][100])
{
int p;

p = array[low];

while (low < high)
{
while (low < high && array[high] >= p)  
high--;
swap(array,low,high,str);
while (low < high && array[low] <= p)  
low++;
swap(array,low,high,str);
}

return low;
}
//
// void qsort_recursive(int array[], int low, int high,char str[][100])//递归
// {
// int p;
//
// if(low < high)
// {
// p = partition(array, low, high,str);
// qsort_recursive(array, low, p - 1,str);
// qsort_recursive(array, p + 1, high,str);
// }
// }
void qsort_nonrecursive(int array[], int low, int high,char str[][100])//非递归
{
int m[50], n[50], cp, p;  

/* 初始化栈和栈顶指针 */
cp = 0;
m[0] = low;
n[0] = high;

while (m[cp] < n[cp])
{
while (m[cp] < n[cp])  
{ /* 向左走到尽头 */
p = partition(array, m[cp], n[cp],str); /* 对当前结点的访问 */
cp++;
m[cp] = m[cp - 1];
n[cp] = p - 1;
}
/* 向右走一步 */
m[cp + 1] = n[cp] + 2;
n[cp + 1] = n[cp - 1];
cp++;
}
}
int main()
{
int i,n;
char str[LENGTH][100],b[LENGTH][100];
int shuju[LENGTH];
char strr[100];

FILE *fi;
 fi=fopen("test1.txt","r");
  
 if(fi==NULL)
 {
  printf("can't open test.txt to read!\n");
  exit(0);
 }
 for(i=0;i<LENGTH;i++)
 {
 fgets(strr,100,fi);
 strcpy((char*)str[i],strr);
  
 }
 fclose(fi);
 for(i=0;i<LENGTH;i++)
 {
  printf("%s\n",str[i]);
 }
 for(i=0;i<LENGTH;i++)
 {
  strncpy(b[i],str[i]+3,2);
  b[i][5]=0;
   
 }
 for(i=0;i<LENGTH;i++)
 {
  shuju[i]=atoi((char*)b[i]);
  
 }

 qsort_nonrecursive(shuju, 0, LENGTH-1,str);
 printf("排序后:\n");
 for(i=0;i<LENGTH;i++)
 {
  printf("%s\n ",str[i]);
// // printf("%s\n ",str[i]);
 }

}
结果只是得到了部分排序结果,还有些未排,请问错在哪里,如何改正?
搜索更多相关主题的帖子: 递归 
2010-11-04 20:12
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:15 
太长了,没时间看,你自己慢慢调试啦!

经验积累中............
2010-11-05 12:29
快速回复:非递归的快速排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017890 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved