演算法(一)排序

2021-08-18 21:41:25 字數 2078 閱讀 3333

一、o(n^2)的排序演算法

1.選擇排序   selection sort

先找到最小的

public static void selectsort(int arr)}}

}

2.氣泡排序   bubble sort

先找到最大的

public static void bubblesort(int arr)}}

}

3.插入排序   insertion sort      

按索引位置,從前向後遍歷,將該元素與它前面的元素比較,將較小的與之交換

與選擇排序相比,可以提前終止內迴圈

public static void insersort(int arr)else }}

}

改進後插入排序,

public static void insertsort2(int arr) 

arr[j] = temp;

}}

插入排序對於排序較為整齊的陣列排序效果很好,比選擇排序快

4.希爾排序    donald shell    縮小增量排序            o(n3/2)

public static void shellsort(int arr)

}}

二、o(nlog n) 的排序演算法

1.歸併排序    merge  sort

(1)遞迴

public static void mergesort(int arr)

public static void merges(int arr,int l,int r)

}//將arr[l,mid] 和 arr[mid+1 , r]兩部分進行歸併

private static void merge(int arr, int l, int mid, int r)

int i = l,j = mid +1;

for (int k = l;k <= r;k ++)else if (j >r)else if (aux[i - l] (2)迭代,自底向上                 適用於鍊錶的排序,因為沒有按陣列的索引取值

public static void mergesortbu(int arr)}}

private static void merge(int arr, int l, int mid, int r)

int i = l,j = mid +1;

for (int k = l;k <= r;k ++)else if (j >r)else if (aux[i - l] 2.快速排序   quick sort

快速排序在陣列近乎有序的時候,退化為o(n^2)

如果沒有遞迴停止條件,會導致棧溢位

(1)二路快排

public static void quicksort(int arr)

public static void quick(int arr,int l,int r)

//返回p 使得arr[l,p-1] 小於p 使得arr[p+1,r] 大於p

public static void swap(int arr,int i ,int j )

public static int partition(int arr,int l ,int r)

swap(arr,i,j);

while (i < j && arr[i] <= privot)

swap(arr,i,j);

}return i;

}

(2)三路快排,分為<    =    >

public static void quciksort3ways(int arr,int l ,int r)else if (arr[i] > v)else 

}swap(arr,l,lt);

quciksort3ways(arr,l,lt -1);

quciksort3ways(arr,gt,r);

}

3.堆排序

演算法(一) 排序sorting

問題 輸入數字a1,a2,a3.an,使其公升序輸出。1 插入排序 insertion sort 演算法 這個演算法從陣列的第二個元素開始迴圈,將選中的元素與之前的元素一一比較,如果選中的元素小於之前的元素,則將之前的元素後移,最後再將選中的元素放在合適的位置。在這個演算法執行的過程中,總是保持著索...

java演算法(一) 排序演算法(上)

排序 sort 是將一組資料按照一定的規則來進行排列,一般按照遞增或者遞減的順序來進行排列。排序演算法是一種最基本的演算法,但是在實際應用中非常廣泛,對於初學程式設計人來說,排序演算法也是最基本的演算法之一。本節主要講解排序演算法中相對簡單的幾種,分別是 1 氣泡排序 2 選擇排序 3 插入排序 後...

演算法學習(一) 排序演算法

參考 排序 氣泡排序是一種很簡單也很常見的排序演算法,我們在初學程式語言,尤其是初學陣列的時候,應該都了解過氣泡排序,下面就當複習吧。public static void pubblesprt int array,int left,int right 氣泡排序 從陣列下標left開始,依次比較相鄰兩...