ソートアルゴリズムの簡単なソート方法

ソートアルゴリズムの簡単なソート方法

ソートの概念:レコードのグループを降順または昇順で再配置する操作です。(単純選択ソート、直接挿入ソート、バブルソート)など、多くのソート方法があります。もちろん、また、(マージソート、クイックソート、ヒープソート、基数ソート)などの高度なソート方法もあります。今日は、主に単純なソートについて説明します。含む(直接挿入ソート、半分挿入ソート、ヒルソート)

直接挿入ソート

  1. 挿入ソートの基本的な考え方:ソートされたサブセットに基づいて、各ステップは、ソートされるすべてが挿入されるまで、ソートされる次のレコードをソートされた順序で順番に挿入します。
  2. アルゴリズムの実装、c言語コード。
void InsertSort(int a[],int n){
    
    
	int i,j,temp;
	for(i=2;i<n;i++)                    //将各元素插入到已排好序列 
	if(a[i]<a[i-1]){
    
                    //a[i]小于前驱 
		temp=a[i];					//temp暂存a[i] 
		for(j=i-1;j>=0&&a[j]>temp;j--){
    
       //检查前面已经排好的 
			a[j+1]=a[j];             //大于temp的元素向后面挪 
			
		}
		a[j+1]=temp;            //复制到插入位置 
   }
   return;
} 
void Printarr(int a[],int n)    //输出数组 
{
    
    
	int i;
	for(i=0;i<n;i++){
    
    
		printf("%d",a[i]);
	}
	return;
} 


int main(){
    
                    //主函数 
	int a[]={
    
    1,8,7,5,6};
	int n=5;
	printf("未排序的数\n"); 
	Printarr(a,n);
	printf("\n");
	InsertSort(a,n);
	printf("排好序的数\n");
	Printarr(a,n);
	return 0;
}

3.実験結果

スペースの複雑さO(1)

最良の時間計算量の結果はO(n)であり、最悪の結果はO(n2)です。

ここに画像の説明を挿入

分割挿入ソート

1.半分の挿入のアイデア:直接挿入に基づいて、半分の検索のアイデアを通じて、挿入する位置をすばやく見つけて、挿入の速度を最適化します。

2.アルゴリズムの実装、c言語コード

#include <stdio.h>

void BinSort(int a[],int n){
    
    
	int i,j,low,high,mid;
	int temp=0;
	for(i=1;i<n;++i) {
    
       //将各元素插入到已排好序列 
			   low=0,high=i-1;
			   temp=a[i];     //当前插入元素个temp保存 
			   while(low<=high){
    
        //进行折半查找 
			   	mid=(low+high)/2;
			   	if(a[mid]>temp) high=mid-1;
			   	else low=mid+1;
			   }  
			      //移动元素 
				for(j=i-1;j>=high+1;--j){
    
    	
				a[j+1]=a[j];
			}
				a[high+1]=temp;
		}
    }  
void Printarr(int a[],int n)    //输出数组 
{
    
    
	int i;
	for(i=0;i<n;i++){
    
    
		printf("%d",a[i]);
	}
	return;
} 

int main(){
    
                    //主函数 
	int a[]={
    
    1,8,7,5,6};
	int n=5;
	printf("未排序的数\n"); 
	Printarr(a,n);
	printf("\n");
	BinSort(a,n);
	printf("排好序的数\n");
	Printarr(a,n);
	return 0;
}

3.実験結果

スペースの複雑さO(1)

最良の時間計算量の結果はO(n)であり、最悪の結果はO(n2)です。

ここに画像の説明を挿入

ヒルソート

1.ヒルソートは「インクリメンタルソートの削減」とも呼ばれます

基本的な考え方:最初に、並べ替えるレコードのシーケンス全体をいくつかのサブシーケンスに分割し、サブシーケンスごとに個別に直接挿入ソートを実行し、レコード全体に対して「基本的に順番に」直接挿入ソートを実行します。シーケンス全体。

2.アルゴリズムの実装、c言語

  #include <stdio.h>

void ShellSort(int a[], int n)  //a -- 待排序的数组, n -- 数组的长度
{
    
    
    int i,j,b;   // b为步长,每次减为原来的一半。
    for (b = n / 2; b > 0; b /= 2)
    {
    
    
        for (i = 0 ;i < b; i++)
        {
    
    
            for (j = i + b; j < n; j += b) 
            {
    
     
                // 如果a[j] < a[j-b],则寻找a[j]位置,并将后面数据的位置都后移。
                if (a[j] < a[j - b])
                {
    
    
                    int tmp = a[j];
                    int k = j - b;
                    while (k >= 0 && a[k] > tmp)
                    {
    
    
                        a[k + b] = a[k];
                        k -= b;
                    }
                    a[k + b] = tmp;
                }
            }
        }
    }
}
 
void Printarr(int a[],int n)    //输出数组 
{
    
    
	int i;
	for(i=0;i<n;i++){
    
    
		printf("%d",a[i]);
	}
	return;
} 

int main(){
    
                    //主函数 
	int a[]={
    
    1,8,7,5,6,};
	int n=5;
	printf("未排序的数\n"); 
	Printarr(a,n);
	printf("\n");
	ShellSort(a,n);
	printf("排好序的数\n");
	Printarr(a,n);
	return 0;
}

3.実験結果

スペースの複雑さO(1)
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44518702/article/details/109811107