今日のビッグデータ時代では、データ処理は特に重要です。今日は、バブルソート、クイックソート、選択的ソートという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;
}
結果は次のとおりです。
お役に立てば幸いです。