Показать сообщение отдельно
Старый 07.11.2005, 22:50   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Комбинированный метод

Для больших массивов ( или, при рекурсивном вызове, частей массивов) используем буыструю сортировку, для частей с длиной меньше параметра (M) - сортировку пузырьком.

Примерно так:
#include<iostream.h>
#include<conio.h>

void B_Sort(int a[],long N){
	int temp;
	for(int j=1;j<N;j++){
 for(int i=0;i<N-j;i++){
 	if(a[i]>a[i+1]){
  temp=a[i];
  a[i]=a[i+1];
  a[i+1]=temp;
 	}
 }
	}
}

void Quick_Sort(int a[], long N,int M) {
	long left=0, right=N-1; 
	int temp;
	int c=a[ N>>1 ];
	do {
 while ( a[left] < c ) left++;
 while ( a[right] > c ) right--;

 if (left <= right) {
 	temp = a[left]; 
 	a[left] = a[right]; 
 	a[right] = temp;
 	left++;
 	right--;
 }
	} while ( left<=right );

	if ( right > 0 ){
 if (right>=M)
 	Quick_Sort(a, right,M);
 else
 	B_Sort(a,right);
	}
	if ( N > left ){
 if (N-left>=M)
 	Quick_Sort(a+left, N-left,M);
 else
 	B_Sort(a+left, N-left);
	}
}



void main(){
	int N;
	cin>>N;
	int *m=new int[N];
	int i=0;
	for( i=0;i<N;i++)
 cin>>m[i];
	Quick_Sort(m,N,4);
	cout<<"-----"<<endl;
	for( i=0;i<N;i++)
 cout<<m[i]<<endl;
	getch();
}
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием