[並べ替え] 3つの簡単な並べ替えアルゴリズム

世界を支配する上位10のアルゴリズム:

  1. マージソート、クイックソート、ヒープソート
  2. フーリエ変換と高速フーリエ変換
  3. ダイクストラのアルゴリズム
  4. RSA非対称暗号化アルゴリズム
  5. ハッシュセキュリティアルゴリズム(Secure Hash Algorithm)
  6. 整数分解アルゴリズム(整数分解)
  7. リンク分析アルゴリズム(リンク分析)
  8. 比例計算アルゴリズム
  9. データ圧縮アルゴリズム
  10. 乱数生成アルゴリズム

3つの単純なソートアルゴリズム(時間の複雑さO(n ^ 2))

(1)直接挿入ソート

  ソートされたサブファイルの適切な位置に各レコードを順番に挿入しますが、挿入されたファイルは引き続き適切です。安定したソートアルゴリズム、時間の複雑さO(n ^ 2)。

class Solution {
    //直接插入排序
    public int[] sortArray(int[] nums) {
        int temp=0;
        for(int i=0;i<nums.length-1;i++){
            temp=nums[i+1];  //暂存第i+1个值,将其插入合适的位置

            int j=i;
            while(j>=0 && nums[j]>temp){
                nums[j+1]=nums[j];
                j--;
            }
            nums[j+1]=temp;
        }
        return nums;
    }
}

(2)直接選択とソート

  不安定な並べ替えアルゴリズム。すべてのレコードの中でキーワードが最小のレコードを選択し、それを格納場所の最初のレコードと交換してから、残りのレコードの中でキーワードが最小のレコードと2番目のレコードを選択します。保管場所を交換します。以下同様に、すべてのレコードが順序付けられたシーケンスになるまで。(n-1回ソート)

class Solution {
    //直接选择排序
    public int[] sortArray(int[] nums) {
        for(int i=0;i<nums.length;i++){  //选第i大的元素放到第i个位置
            int small=i;
            for(int j=i+1;j<nums.length;j++){
                if(nums[j]<nums[small])
                    small=j;
            }
            if(small!=i)
                swap(nums,i,small);
        }
        return nums;
    }

    public void swap(int[] nums,int i,int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
}

(3)バブルソート

  アイデア:常に2つの隣接するレコードを比較します。ソート要件が満たされない場合は、n-1番目のレコードがn番目のレコードと比較されて交換されるまで、隣接するレコードを交換して、バブルソートを完了します、最大のキーワードを持つレコードが最後の位置に配置されるようにします。次に、最初のn-1レコードに対して、n-1パスが実行されるまで同じ操作が実行されます。

class Solution {
    //冒泡排序,O(n^2)
    public int[] sortArray(int[] nums) {
        int flag=1;
        for(int i=1;i<nums.length && flag==1;i++){  //循环n-1次
            flag=0;
            for(int j=0;j<nums.length-i;j++){
                if(nums[j]>nums[j+1]){
                    flag=1;
                    swap(nums,j,j+1);
                }
            }
        }
        return nums;
    }

    public void swap(int[] nums,int i,int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
}

3つの単純なソートアルゴリズムの比較

直接挿入ソート 直接選択ソート バブルソート
よりキーワード 回以上 レコードの移動の 移動回数 よりキーワード 回以上 レコードの移動の 移動回数 よりキーワード 回以上 レコードの移動の 移動回数
ベスト(正の順序) O(n) O(n) O(n2) 0 O(n) 0
最悪(逆順) O(n2) O(n2) O(n2) O(n) O(n2) O(n2)
平均 O(n2) O(n2) O(n2) O(n) O(n2) O(n2)
平均時間の複雑さ O(n2) O(n2) O(n2)
スペースの複雑さ O(1) O(1) O(1)

おすすめ

転載: www.cnblogs.com/gzshan/p/12759817.html