C++は高速並べ替え法で一組のデータを小さいから大きいまで並べ替える

10594 ワード

≪クイック・ソート|Quick Sort|emdw≫:ソートするデータを1回のソートで独立した2つの部分に分割し、一部のすべてのデータが他の部分のすべてのデータよりも小さくなり、この方法で2つの部分のデータをそれぞれクイック・ソートします(このプロセスでは関数の再帰的な方法が使用できます).
#include 
#include //     
using namespace std;

void srandData(int *, int );//            
void sort(int *, int ,int );//         
void display(int *, int );//        
int main()
{
	const int N = 10;
	int arr[N];

	srandData(arr, N);
	sort(arr, 0, N - 1);
	display(arr, N);

    return 0;
}
void srandData(int *a, int n)
{
    srand(time(NULL));
	
	for (int i = 0; i < n; i++)
	{
		a[i] = rand() % 50;// 50     
		cout << a[i] << " ";
	}
	
	cout << endl;
}
void sort(int *a, int start, int end)
{
	if(start >= end)
	{
		return ;
	}
    int i = start;
    int j = end;
    int key = a[i];//     
	while(i < j)
	{
		while(i < j && a[j] >= key)
		{
			j--;
		}
		a[i] = a[j];
		while(i < j && a[i] <= key)
		{
			i++;

		}
		a[j] = a[i];
	}
	a[i] = key;
	sort(a, start, i - 1);//           
	sort(a, i + 1, end);
}
void display(int *a, int n)
{
    for(int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}