一般的に使用されるいくつかのソートアルゴリズム(バブルソート、クイックソート、選択的ソート)

今日のビッグデータ時代では、データ処理は特に重要です。今日は、バブルソート、クイックソート、選択的ソートという2つの一般的なソートアルゴリズムを紹介します。

(1)バブルソート

基本的な考え方:

n個の数値を1つずつバブルソートする場合は、n-1回比較する必要があります。最初の比較では、n-1回比較する必要があります。j番目の比較では、nj回比較する必要があります。 ;したがって、このアルゴリズムを実装するために必要なforループは2つだけです。

コードは以下のように表示されます:

#include<stdio.h>
void Fun(int arr[])
{
    
     
	int i,j;
	int temp;
	for(i=0;i<10;i++)
		for(j=0;j<9;j++)
			if(arr[j]<arr[j+1])
			{
    
    
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
			for(int i=0;i<10;i++)
			{
    
    
				printf("%d ",arr[i]);
			}
}
int main()
{
    
    
	int arr[]={
    
    8,5,4,3,8,7,9,5,3,2};           //定义10个长度的数组存放数据,实例化十个参数
	Fun(arr);
	return 0;
}

結果は次のとおりです。

ここに画像の説明を挿入

(2)クイックソート

基本的な考え方:

ソートするn個のデータのうち、最初のデータを基準値として、すべてのデータを3つのグループに分けます。最初のグループのすべてのデータ値は、ベンチマーク値の2番目のグループ以下であり、3番目のグループのすべてのデータ値は、ベンチマーク値の2番目のグループ以上です。これで最初の分割が完了しました。各グループにデータが1つだけになるまで、最初のグループと3番目のグループについて上記の方法を繰り返します。

コードは以下のように表示されます:

#include<stdio.h>                             //快排
void quicksort(int arr[],int start,int end)
{
	int i,j;
	i=start;
	j=end;
	arr[0]=arr[start];
	while(i<j)
	{
		while(i<j && arr[0]<arr[j])
			j--;
		if(i<j)
		{
			arr[i]=arr[j];
			i++;
		}
		while(i<j && arr[i]<=arr[0])
			i++;
		if(i<j)
		{
			arr[j]=arr[i];
			j--;
		}
	}
	arr[i]=arr[0];
	if(start<i)
		quicksort(arr,start,j-1);
	if(i<end)
		quicksort(arr,j+1,end);
}
int main()
{
	int i;
	int arr[11];
	for(i=1;i<=10;i++)
	{
		scanf_s("%d",&arr[i]);
	}
	quicksort(arr,1,10);
	for(int i=1;i<=10;i++)
	{
		printf("%d ",arr[i]);
	}
	puts("");
	return 0;
}

コード実行結果は次のとおりです。

ここに画像の説明を挿入

(3)選定順序

コードは以下のように表示されます:

#include<stdio.h>                                //选择排序
void Fun(int *arr,int len)
{
	int min;
	int i;
	for( i=0;i<len;i++)
	{
		 min=i;                                               //找到初始值min
		for(int j=i+1;j<len;j++)
		{
			if(arr[j]<arr[min])                           //比较min和j的大小
				min=j;
		}
		if(min!=i)
		{
			int temp=arr[i];                               //
			arr[i]=arr[min];
			arr[min]=temp;
		}
	}
	
}
int main()
{
	
	int arr[]={4,3,5,6,2,7,6,9,8,1};                              //测试用例 (1,2,3,4,5,6,6,7,8,9)
	int len= sizeof(arr)/sizeof (arr[0]);                       //求数组长度
	Fun(arr,10);                                               //调用Fun函数
	for(int i=0;i<len;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

結果は次のとおりです。

ここに画像の説明を挿入
お役に立てば幸いです。

おすすめ

転載: blog.csdn.net/Gunanhuai/article/details/88846045