バブルソート
バブルソートは通常、ソートバブルソートと私たち最初の接触は、バブルソートは、多数または小数のアイデアが注文を完了するために、シンクで並べ替え、より多くの典型的なものです。誰もがソースコードを見て与えます
パッケージソート、
パブリック クラスmaopao {
公共 静的 ボイドメイン(文字列[]引数){
INT [] = 新しい新しい INT [10]; // 配列の割り当てのために、我々は、スキャナによってソートするコンソールからデジタル入力することができる
int型M ;
のための(INT I = 0;私は<10; I ++ ){
[I] = I;
}
ため(INT K = 0; K <a.length; K ++){ // どのように多くの数ソートする
ために(INT p = 0; p <a.length- 1; p ++){// すべての何比較
IF([K]> A = [P]){ // 比較
M = A [K]、
[K]が [P]を=; // 2つの数交換
A [P] = M;
}
}
}
のためには、(int型I:A){
するSystem.out.println(I)を; //は、最後の完全ソートを反復
}
}
}
バブルソートの場合、バブルソートの時間計算量はO(N²)、複雑性が高い時、バブルソート適切な少量を使用している、10進数またはシンク、多数のシンクと考えられています多数は、バブルソート、時間の無駄の使用を推奨していない場合。例えば、これらの番号、第1の数と第2の数の取得の比較、3 <7、交換することなく、4,7及び比較7>交換位置4 及び7と9を比較して、7 <9、なし我々は、交換する必要があり、その後、トップの方法に従ってそれを試して、比較しないいくつかの数字を残しました。その後、偽のそれは最初の並べ替えをここに。次の1種類をご紹介します。
バケットソート
バケツのためのソート、それを見てバケットを取らせ、ソートあなたは聞いたことがないかもしれませんが、バケットは、ソート、独自の利点があり、容易に理解すること。バレルは、名前がある種の容器を使用することであることを示唆しているコンテナ、バケットソートとして理解することができ、それが並べ替え、その後、ソースコードを見てこの原理を使用しています。
package sort;
import java.util.Scanner;
public class TSort {
public static void main(String[] args) {
System.out.println("请输入要排序的数量");
Scanner sn=new Scanner(System.in);
int number=sn.nextInt();
System.out.println("请输入要排序中的最大数");
int max=sn.nextInt();
int []array=new int[max+1];
for(int j=0;j<array.length;j++) {
array[j]=0; //定义容器,也就是桶
}
System.out.println("请输入要排序的数");
for(int i=0;i<number;i++) {
int numbers=sn.nextInt();
array[numbers]++; //表示有numbers这个数放到了array[numbers]里,array[numbers]+1
}
sn.close();
for(int j=0;j<array.length;j++) {
for(int i=1;i<=array[j];i++) { //将有添加进来的数,按顺序输出出去
System.out.println(j);
}
}
}
}
桶排序是准备一个连续的数组作为容器,若有数添加进来,则在定义的容器数组相应的地方自加一次,然后添加进来的数相应的数组上的数应该是>=1的,然后依次输出即可。这个方法的弊端已经明显了吧,就是当你要给一个特别大的数进行排序时,需要建立一个特别大的数组,并且还要浪费很多空间,所以当要排序的数很大时,不建议使用这一种方法
快速排序
快速排序大家可能听说过,这种方法用的也比较多,使用这种方法会用到递归这种思想,递归,就是写一个方法然后自己调用自己,设置一个退出条件,完成操作。老规矩,先看源码
package sort;
import java.util.Scanner;
public class QuikSort {
public static void quickSort(int[] arrars,int left,int right){
int i,j,temp,t;
if(left>right){
return;
}
i=left;
j=right;
//temp就是基准位
temp = arrars[left];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arrars[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arrars[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arrars[j];
arrars[j] = arrars[i];
arrars[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arrars[left] = arrars[i];
arrars[i] = temp;
//递归调用左半数组
quickSort(arrars, left, j-1);
//递归调用右半数组
quickSort(arrars, j+1, right);
}
public static void main(String[] args){
int[] arrays = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arrays, 0, arrays.length-1);
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
//}
}
配列にこれらの数字を置く思考のクイックソートは、最初は通常、対応する位置を見つけるために、数最初の番号を、取る、番号を思い付くが、この位置はこの数よりも少ない場所を必要とし、かなり特殊ですそれは、この番号の右側に、その大きな数字よりも、左側にありますので、左の数と、右側に設定する必要があり、左側の終了条件右のラベルのラベルよりも大きい場合、その後は意味浪費時間と空間がないので負けます。