ورود

View Full Version : مرتب سازی درجی در c



yegane8
شنبه 29 مهر 1391, 21:58 عصر
سلام
این کد مربوط به مرتب سازی درجی است اما نمی دونم چرا فقط تا عنصر سوم چک میشه
#include "conio.h"
#include "stdio.h"
int insertionSort(int n,int arr[]);
int main(){
int n;
printf("enter lenght of array");
scanf("%d",&n);
int num[n];
printf("enter the number to sort");
for(int i = 0; i < n; i = i + 1){
scanf("%d",&num[i]);
}
insertionSort(n,num);
getch();
return 0;
}

int insertionSort(int n,int arr[]){
int j=2;
int item,i;
item = arr[2];
i = j-1;
for(j=2;j<=n;j++) {
while(item<arr[i]){
arr[i+1] = arr[i];
i=i-1;
}
arr[i+1] = item;
}
for(int m = 0; m < n; m++){
printf("%d\t",arr[m]);
}
getch();
return 0;
}


لطفا راهنمایی کتید
باتشکر

omidshaman
یک شنبه 30 مهر 1391, 00:04 صبح
این قسمت کدت مشکل داره چون اگر اون item<arr[i] اشتباه باشه دیگه سورت کردن انجام نمیشه!(حتی اگر دفعه اول باشه)
چون ببین اگر اشتباه باشه میره به قسمت arr[i+1]=item که خوب این باعث میشه محتویات arr تغییر کنه که بازم اون شرط item<arr[i] اشتباه باقی می مونه البته اگر بزاری item=arr[i+1] این مشکل حل میشه (این جوری item محتویات arr رو می گیره )
بعد دوما شما داری item رو با arr[i] مقایسه می کنی حالا امدیمو arr[i] بزرگترین بود این جوری بازم مرتب سازی انجام نمیشه !
بعد از اینا بگذریم شماi رو قرار دادی 1 خوب واضحه که حداکثر 2 بار مرتب سازی انجام میشه چون اگر بیشتر از2 بار انجام شه i منفی میشه
این ایراداتی که گفتمو رفع کن درست میشه...
for(j=2;j<=n;j++) {
while(item<arr[i]){
arr[i+1] = arr[i];
i=i-1;
}
arr[i+1] = item;
} }