Heim > Java > javaLernprogramm > Hauptteil

Ist Java ein Algorithmus?

青灯夜游
Freigeben: 2019-11-19 17:13:24
Original
2899 Leute haben es durchsucht

Ist Java ein Algorithmus?

Java ist kein Algorithmus.

Java ist eine objektorientierte Programmiersprache und eine weit verbreitete Computerprogrammiersprache Es weist die Merkmale einer plattformübergreifenden, objektorientierten und generischen Programmierung auf und wird häufig verwendet in der Entwicklung von Webanwendungen auf Unternehmensebene und der Entwicklung mobiler Anwendungen.

Algorithmus bezieht sich auf eine genaue und vollständige Beschreibung einer Problemlösung. Es handelt sich um eine Reihe klarer Anweisungen zur Lösung von Problemen. Der Algorithmus stellt eine systematische Methode zur Beschreibung des strategischen Lösungsmechanismus dar Probleme. Mit anderen Worten: Es ist möglich, innerhalb einer begrenzten Zeit für eine bestimmte Eingabespezifikation den erforderlichen Output zu erhalten. Wenn ein Algorithmus fehlerhaft oder für ein Problem ungeeignet ist, wird die Ausführung des Algorithmus das Problem nicht lösen. Verschiedene Algorithmen können unterschiedliche Zeit, Raum oder Effizienz nutzen, um dieselbe Aufgabe zu erledigen. Die Qualität eines Algorithmus kann an seiner räumlichen und zeitlichen Komplexität gemessen werden.

Wir können die Java-Sprache verwenden, um verschiedene Algorithmen zu implementieren.

Mehrere gängige Sortieralgorithmen in Java

1. Blasensortierung

Ist Java ein Algorithmus?

a. Blasensortierung Maximaler/minimaler Wert bei jedem Durchlauf

b, setzen Sie den maximalen/minimalen Wert am Ende/Kopf

c, entfernen Sie dann den maximalen/minimalen Wert und den Rest. Die Daten werden durchlaufen um den Maximal-/Minimalwert zu erhalten

d, Code-Implementierung

public static void main(String[] args) {

        int arr[] = {8, 5, 3, 2, 4};

        //冒泡
        for (int i = 0; i < arr.length; i++) {
            //外层循环,遍历次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                //内层循环,升序(如果前一个值比后一个值大,则交换)
                //内层循环一次,获取一个最大值
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }
Nach dem Login kopieren

e, Sortiervorgang (rot: Daten verschieben)

5,3, 2,4 ,8

3,2,4,5,8

2,3,4,5,8

2,3,4,5,8

2,3,4,5,8

2. Auswahlsortierung

Ist Java ein Algorithmus?

a. Behandeln Sie den ersten Wert als Mindestwert

b Index

c. Tauschen Sie den Startwert und den Minimalwert dieser Durchquerung aus

d Beschreibung: Behandeln Sie bei jeder Durchquerung den zuvor gefundenen Mindestwert als Die geordnete Liste wird als ungeordnete Liste behandelt , und dann wird die ungeordnete Liste jedes Mal durchlaufen, um den Mindestwert zu finden.

e, Code-Implementierung

public static void main(String[] args) {

        int arr[] = {6, 5, 3, 2, 4};

        //选择
        for (int i = 0; i < arr.length; i++) {
            //默认第一个是最小的。
            int min = arr[i];
            //记录最小的下标
            int index = i;
            //通过与后面的数据进行比较得出,最小值和下标
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]) {
                    min = arr[j];
                    index = j;
                }
            }
            //然后将最小值与本次循环的,开始值交换
            int temp = arr[i];
            arr[i] = min;
            arr[index] = temp;
            //说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换
        }
    }
Nach dem Login kopieren

f, Sortierprozess (rot: Daten verschieben)

2,5,3,6 , 4

2,3,5,6,4

2,3,4,6,5

2,3,4,5,6

2,3,4,5,6

3. Einfügungssortierung

Ist Java ein Algorithmus?

a. Standardmäßig beginnt der Vergleich mit den zweiten Daten.

b. Wenn die zweiten Daten kleiner sind als die ersten, tauschen Sie sie aus. Vergleichen Sie es dann mit den dritten Daten und fügen Sie es ein, wenn es kleiner als das vorherige ist (Schlauheit). Andernfalls verlassen Sie die Schleife

c. Standardmäßig werden die ersten Daten als geordnete Liste betrachtet und die folgenden ungeordneten Listen durchlaufen alle Daten. Wenn sie kleiner als die vorherigen Daten sind, werden sie eingefügt (getauscht). Ansonsten beenden.

d, Code-Implementierung

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        //插入排序
        for (int i = 1; i < arr.length; i++) {
            //外层循环,从第二个开始比较
            for (int j = i; j > 0; j--) {
                //内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                } else {
                    //如果不小于,说明插入完毕,退出内层循环
                    break;
                }
            }
        }
    }
Nach dem Login kopieren

e, Sortierprozess (rot: geordnet, schwarz: ungeordnet)

5,7 ,3 ,2,4

3,5,7,2,4

2,3,5,7,4

2,3,4,5,7

4. Hügelsortierung (Einfügesortiervariante)

Ist Java ein Algorithmus?

a. Im Grunde das gleiche Prinzip wie bei der Einfügungssortierung

b Der Unterschied besteht darin, dass die Schrittgröße jedes Zyklus halbiert wird

c Unterschied ist. Einfügungssortierung durch Abstand mehrerer Daten.

d, Code-Implementierung

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        //希尔排序(插入排序变种版)
        for (int i = arr.length / 2; i > 0; i /= 2) {
            //i层循环控制步长
            for (int j = i; j < arr.length; j++) {
                //j控制无序端的起始位置
                for (int k = j; k > 0  && k - i >= 0; k -= i) {
                    if (arr[k] < arr[k - i]) {
                        int temp = arr[k - i];
                        arr[k - i] = arr[k];
                        arr[k] = temp;
                    } else {
                        break;
                    }
                }
            }
            //j,k为插入排序,不过步长为i
        }
    }
Nach dem Login kopieren

e, Sortierprozess (Schrittgröße 4/2/1)

4,1,3,2,6,5 ,8,9,7

3,1,4,2,6,5,7,9,8

1,2,3,4,5,6,7,8 ,9

5. Schnellsortierung

Ist Java ein Algorithmus?

a Die ersten Daten in der Bestätigungsliste sind der erste Wert als Leerzeichen (Niedriger Zeiger ist frei).

b. In der verbleibenden Warteschlange sieht man dann zwei linke und rechte Zeiger (hoch und niedrig).

c. Wenn Daten gefunden werden, die kleiner als der mittlere Wert sind, werden die Daten der Leerstelle des niedrigen Zeigers zugewiesen und die hohen Zeigerdaten werden als Leerstandswert betrachtet ( hohe Stellenausschreibung). Bewegen Sie dann zuerst den unteren Zeiger nach rechts und wechseln Sie die Bewegung des unteren Zeigers.

d、当低指针移动到大于中间值的时候,赋值到高指针空缺的地方。然后先高指针向左移动,并且切换高指针移动。重复c、d操作。

e、直到高指针和低指针相等时退出,并且将中间值赋值给对应指针位置。

f、然后将中间值的左右两边看成行的列表,进行快速排序操作。

g、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4, 1, 8, 9, 6};

        //快速排序
        int low = 0;
        int high = arr.length - 1;
        quickSort(arr, low, high);  
    }

    public static void quickSort(int[] arr, int low, int high) {
        //如果指针在同一位置(只有一个数据时),退出
        if (high - low < 1) {
            return;
        }
        //标记,从高指针开始,还是低指针(默认高指针)
        boolean flag = true;
        //记录指针的其实位置
        int start = low;
        int end = high;
        //默认中间值为低指针的第一个值
        int midValue = arr[low];
        while (true) {
            //高指针移动
            if (flag) {
                //如果列表右方的数据大于中间值,则向左移动
                if (arr[high] > midValue) {
                    high--;
                } else if (arr[high] < midValue) {
                    //如果小于,则覆盖最开始的低指针值,并且移动低指针,标志位改成从低指针开始移动
                    arr[low] = arr[high];
                    low++;
                    flag = false;
                }
            } else {
                //如果低指针数据小于中间值,则低指针向右移动
                if (arr[low] < midValue) {
                    low++;
                } else if (arr[low] > midValue) {
                    //如果低指针的值大于中间值,则覆盖高指针停留时的数据,并向左移动高指针。切换为高指针移动
                    arr[high] = arr[low];
                    high--;
                    flag = true;
                }
            }
            //当两个指针的位置相同时,则找到了中间值的位置,并退出循环
            if (low == high) {
                arr[low] = midValue;
                break;
            }
        }
        //然后出现有,中间值左边的小于中间值。右边的大于中间值。
        //然后在对左右两边的列表在进行快速排序
        quickSort(arr, start, low -1);
        quickSort(arr, low + 1, end);
    }
Nach dem Login kopieren

h、排序过程

6,5,3,2,4,1,7,9,8

1,5,3,2,4,6,7,9,8

1,5,3,2,4,6,7,9,8

1,4,3,2,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,8,9

6、归并排序

Ist Java ein Algorithmus?

a、将列表按照对等的方式进行拆分

b、拆分小最小快的时候,在将最小块按照原来的拆分,进行合并

c、合并的时候,通过左右两块的左边开始比较大小。小的数据放入新的块中

d、说明:简单一点就是先对半拆成最小单位,然后将两半数据合并成一个有序的列表。

e、代码实现

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4, 1,6};

        //归并排序
        int start = 0;
        int end = arr.length - 1;
        mergeSort(arr, start, end);
    }

    public static void mergeSort(int[] arr, int start, int end) {
        //判断拆分的不为最小单位
        if (end - start > 0) {
            //再一次拆分,知道拆成一个一个的数据
            mergeSort(arr, start, (start + end) / 2);
            mergeSort(arr, (start + end) / 2 + 1, end);
            //记录开始/结束位置
            int left = start;
            int right = (start + end) / 2 + 1;
            //记录每个小单位的排序结果
            int index = 0;
            int[] result = new int[end - start + 1];
            //如果查分后的两块数据,都还存在
            while (left <= (start + end) / 2 && right <= end) {
                //比较两块数据的大小,然后赋值,并且移动下标
                if (arr[left] <= arr[right]) {
                    result[index] = arr[left];
                    left++;
                } else {
                    result[index] = arr[right];
                    right++;
                }
                //移动单位记录的下标
                index++;
            }
            //当某一块数据不存在了时
            while (left <= (start + end) / 2 || right <= end) {
                //直接赋值到记录下标
                if (left <= (start + end) / 2) {
                    result[index] = arr[left];
                    left++;
                } else {
                    result[index] = arr[right];
                    right++;
                }
                index++;
            }
            //最后将新的数据赋值给原来的列表,并且是对应分块后的下标。
            for (int i = start; i <= end; i++) {
                arr[i] = result[i - start];
            }
        }
    }
Nach dem Login kopieren

f、排序过程

5,7,3,2,4,1,6

5,7,2,3,4,1,6

2,3,5,7,4,1,6

2,3,5,7,1,4,6

2,3,5,7,1,4,6

1,2,3,4,5,6,7

推荐教程:Java教程

Das obige ist der detaillierte Inhalt vonIst Java ein Algorithmus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage