쉘정렬 질문드립니다.
채련
분할하고 삽입정렬대신 버블정렬로 해봤습니다.
그런대 꼭 루프가 중간값까지만 교환하고마지막 값과는 죽어도 교환을 안하는군요..어디가 문제인가요?
#include stdio.h
void bubble(int arr[], int interval, int size, int start);
void shellSort(int arr[], int size);
ze);
int main(void)
{
int i;
int arr[9]={9,8,7,6,5,4,3,2,1};
printf(삽입정렬 전 배열 원소\n);
for(i=0; i9; i++)
{
printf(%d ,arr[i]);
}
printf(\n);
printf(===========정렬시작===========\n);
shellSort(arr, 9);
printf(===========정렬종료===========\n);
printf(정렬후 배열 원소값\n);
for(i=0; i9; i++)
{
printf(%d ,arr[i]);
}
printf(\n);
return 0;
}
void shellSort(int arr[], int size)
{
int i,interval;
interval=size;
do{
interval=interval/3+1;
for(i=0; iinterval; i++)
{
bubble(arr,interval,size,i);
}
}while(interval1);
printf(%d ,arr[i]);//루프패스(단계)
}void bubble(int arr[], int interval, int size,int start)//arr=초기배열,interval=간격,size배열크기,start초기시작값
{
int i,temp;
for(i=start; i=size; i=i+interval)//
{
if(arr[start+interval]arr[start])//
{
temp=arr[start+interval];
printf(temp의 값 : %d\n,temp);
arr[start+interval]=arr[start];
arr[start]=temp;
printf(%2d ,arr[i]);
}printf(%2d ,i);//루프패스
}
printf(\n);
for(i=0; isize; i++)
{
printf(%d ,arr[i]);
}
printf(\n);
}
-
소년틳터프
ㅇ