• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

مرتب کردن آرایه از وسط آرايه

sima_c

کاربر تازه وارد
تاریخ عضویت
21 می 2006
نوشته‌ها
30
لایک‌ها
0
دوستان کسی می تونه کمکم کنه ؟
میخوام آرایه رو از موقعيت وسط آرايه به سمت دو انتها صعودي يا نزولي مرتب کنم.
ممنون میشم دوستان راهنماییم کنن
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
خب ارایه رو دو تیکه کنید یکی رو صعودی و دیگری رو نزولی کنید
برای دوقسمت کردن اگه ارایه تون به نام A به اندازه SIZE جا داره این طوری عمل کنید قسمت اول می شه خود A و اندازش SIZE/2 و قسمت بعدی می شه (A+SIZE( و اندازش هم SIZE-SIZE/2 هست
 

sima_c

کاربر تازه وارد
تاریخ عضویت
21 می 2006
نوشته‌ها
30
لایک‌ها
0
کد:
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

void sort(int* x, int n);
void prnt(int* x, int n);
void arinv(int* x, int n);
void arnop(int* x, int n);
void (*fp)(int* x, int n);

int main(){

	const int n=10;
	int x[n]={9,5,28,76,2,12,25,40,13,36};
	int y[n],i;

	i=0;
	while(i<n)y[i]=x[i++];
	fp=arnop;
	sort(y,n);
	prnt(y,n);
	i=0;
	while(i<n)y[i]=x[i++];
	fp=arinv;
	sort(y,n);
	prnt(y,n);
	return(0);
	}

void sort(int* x, int n){
	int i=1, j, t;
	while(i<n){
		j=i++;
		while(j--)
			if(x[j]>x[j+1]){
				t=x[j];
				x[j]=x[j+1];
				x[j+1]=t;
				}
			else break;
		}
	fp(x,n);
	}

void prnt(int* x, int n){
	int i=0;
	cout<<"\n";
	while(i<n)
		printf("%4d",x[i++]);
	}

void arinv(int* x, int n){
	int i=0, t;
	while(i<n/2){
		t=x[i];
		x[i]=x[n-i-1];
		x[n-i-1]=t;
		i++;
		}
	}

void arnop(int* x, int n){
	}

در اين برنامه چهار تابع تعريف شده .تابع sort آراية دريافت شده را مرتب مي‌کند و سپس اشاره‌گر تابعي عمومي fp را اجرا مي نمايد که در اين برنامه ممکن است به يکي از دو تابع arinv يا arnop اشاره کند. در حالت اول آراية بدست آمده نزولي و در حالت دوم صعودي مرتب شده خواهند بود. من میخوام به این برنامه توابعي اضافه کنم (مشابه عملکرد arinv) که بتوان آرايه را به صورت مرتب شده از موقعيت وسط آرايه به سمت دو انتها صعودي يا نزولي بدست آورد
 

A.S.Roma

کاربر تازه وارد
تاریخ عضویت
9 می 2006
نوشته‌ها
24
لایک‌ها
0
با سلام
فكر مي كنم منظورتان Quick Sort است.
ببينيد اين تابع همان كار را انجام ميدهد ؟

HTML:
void quicksort(int num[] , int left ,int right ){
	int i,j,x,temp;
	i=left; j=right ; x= num[(left+right)/2];
	do{
		while(num[i]<x && i<right)
			i++;
		while(x<num[j] && j>left)
			j--;
		if(i<=j){
			temp=num[i];
			num[i]= num[j];
			num[j]=temp;
			i++;
			j--;
		}
	}while(i<=j);
	if(left < j)
		quicksort(num , left ,j);
	if( i<right)
		quicksort(num , i ,right);
}
 

sima_c

کاربر تازه وارد
تاریخ عضویت
21 می 2006
نوشته‌ها
30
لایک‌ها
0
ممنونم اما با همون توابع داده شده می خوام اینکارو بکنم
من کد زیر رو نوشتم اما 5 رقم اول رو نزولی چاپ نمیکنه ...
اشکالات کار منو میشه بگی
ممنون میشم
کد:
void sort2(int* x, int n){
	int i=1, j=6, t;
	while(i<n/2){
		j=i++;
		while(j--)
			if(x[j]>x[j+1]){
				t=x[j];
				x[j]=x[j+1];
				x[j+1]=t;
				}
			else break;
		}
	fp(x,i);

		i=5;
		while(i<n){
		j=i++;
		while(j--)
			if(x[j]>x[j+1]){
				t=x[j];
				x[j]=x[j+1];
				x[j+1]=t;
				}
			else break;
		}
	fp(x,n/2);
	}
 
بالا