日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

选择排序-冒泡排序-归并排序-快速排序-插入排序

發布時間:2024/10/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 选择排序-冒泡排序-归并排序-快速排序-插入排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

選擇排序

  • 基本思想:
    設所排序序列個數為N,i取1,2,3…n-1,從N-i+1個記錄(Ri,Ri+1….Rn)中找出排序碼最小的記錄,與第i個記錄交換,執行N-1次后完成序列的排序。
//選擇排序 private static void selectSort(int[] arr, int n) {for (int i = 0; i < n - 1; ++i) {for (int j = i + 1; j < n; ++j) {if (arr[i] > arr[j]) {int t = arr[i];arr[i] = arr[j];arr[j] = t;}}} }

冒泡排序

  • 基本思想:
    相鄰的元素進行兩兩比較,順序相反則進行交換,每一次都會將最大或最小的元素"浮上來",最終達到有序
//冒泡排序 private static void bubbleSort(in[] arr, into n) {for (int i = 0; i < n - 1; ++i) {for (int j = 0; j < n - 1 - i; ++j) {if (arr[j] > arr[j + 1]) {int t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}} }

歸并排序

  • 將若干有序序列進行兩兩合并,直到待排序記錄都在一個有序序列中為止
//歸并排序 private static void mergeSort(int[] arr, int n) {mergeSort(arr, 0, n - 1); }private static void mergeSort(int[] arr, int low, int high) {if (low < high) {int mid = (low + high) / 2;// 左邊mergeSort(arr, low, mid);// 右邊mergeSort(arr, mid + 1, high);// 左右歸并merge(arr, low, mid, high);} }private static void merge(int[] arr, int low, int mid, int high) {int[] temp = new int[high - low + 1];int i = low;// 左指針int j = mid + 1;// 右指針int k = 0;// 把較小的數先移到新數組中while (i <= mid && j <= high) {if (arr[i] < arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}// 把左邊剩余的數移入數組while (i <= mid) {temp[k++] = arr[i++];}// 把右邊邊剩余的數移入數組while (j <= high) {temp[k++] = arr[j++];}// 把新數組中的數覆蓋arr數組for (int k2 = 0; k2 < temp.length; k2++) {arr[k2 + low] = temp[k2];} }

快速排序

  • 基本思想:
    通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序。
//快速排序 private static void quickSoft(int arr[], int length) {quickSoft(arr, 0, length - 1); }private static void quickSoft(int arr[], int low, int high) {int pos;if (low < high) {pos = partition(arr, low, high);quickSoft(arr, low, pos - 1);quickSoft(arr, pos + 1, high);} }private static int partition(int[] arr, int low, int high) {int val = arr[low];while (low < high) {while (low < high && arr[high] >= val) {--high;}arr[low] = arr[high];while (low < high && arr[low] <= val) {++low;}arr[high] = arr[low];}arr[low] = val;return low; }

插入排序

  • 基本思想:
    每次將一個待排序的記錄按其關鍵碼的大小插入到一個已經排好序的有序序列中,直到全部記錄排好序。
//插入排序 private static void insertSoft(int[] arr, int n) {for (int i = 1; i < n; i++) {int t = arr[i];int k = i;for (int j = i - 1; j >= 0 && arr[j] > t; --j) {arr[j + 1] = arr[j];k = j;}arr[k] = t;} }

總結

以上是生活随笔為你收集整理的选择排序-冒泡排序-归并排序-快速排序-插入排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。