1. 程式人生 > >安卓快速排序與氣泡排序

安卓快速排序與氣泡排序

直接上程式碼~

氣泡排序

 private void swap(int[] arrays, int i, int j) {
        int temp;
        temp = arrays[i];
        arrays[i] = arrays[j];
        arrays[j] = temp;
    }

    public int[] arrayIntSort(int[] array) {
        for (int i = 1; i < array.length; i++) {
            for (int j = 0; j < array
.length - i; j++) { if (array[j] > array[j + 1]) { swap(array, j, j + 1); } } } return array; }

快速排序

private void quickSort(int[] array, int start, int end) {
        int left = start;
        int right = end;
        if
(left < right) { int temp = array[left]; while (left != right) { while (left < right && temp <= array[right]) right--; array[left] = array[right]; while (left < right && temp >= array
[left]) left++; array[right] = array[left]; } array[right] = temp; quickSort(array, start, left - 1); quickSort(array, right + 1, end); } }

c++氣泡排序寫法


void swap(jint *arrays, int i, int j) {
    int temp;
    temp = arrays[i];
    arrays[i] = arrays[j];
    arrays[j] = temp;
}

JNIEXPORT jintArray JNICALL
Java_com_cpf_ndkdemo_MainActivity_arrayIntSortByNative(JNIEnv *env, jobject instance,
                                                          jintArray array_) {
    jint *array = env->GetIntArrayElements(array_, NULL);
    int length = env->GetArrayLength(array_);
    for (int i = 1; i < length; i++) {
        for (int j = 0; j < length - i; j++) {
            if (array[j] > array[j + 1]) {
                swap(array, j, j + 1);
            }
        }
    }
    jintArray jintArray = env->NewIntArray(length);
    env->SetIntArrayRegion(jintArray, 0, length, array);
    env->ReleaseIntArrayElements(array_, array, 0);
    return jintArray;
}


c++快速排序寫法


void fastSort(jint *array, jint start, jint end) {
    int left = start;
    int right = end;
    if (left < right) {
        int temp = array[left];
        while (left != right) {
            while (left < right && temp <= array[right])
                right--;
            array[left] = array[right];
            while (left < right && temp >= array[left])
                left++;
            array[right] = array[left];
        }
        array[right] = temp;
        fastSort(array, start, left - 1);
        fastSort(array, right + 1, end);
    }
}

JNIEXPORT jintArray JNICALL
Java_com_cpf_ndkdemo_MainActivity_arrayFastIntSortByNative(JNIEnv *env, jobject instance,
                                                              jintArray array_, jint start,
                                                              jint end) {
    jint *array = env->GetIntArrayElements(array_, NULL);
    fastSort(array, start, end);
    jintArray jintArray = env->NewIntArray(end + 1);
    env->SetIntArrayRegion(jintArray, 0, end + 1, array);
    env->ReleaseIntArrayElements(array_, array, 0);
    return jintArray;
}

快速排序波動大,氣泡排序更穩定,資料量越大快速排序速度優勢越明顯;

在資料大多數順序正確的情況下氣泡排序可能更快,而資料越混亂快速排序越快;

相關推薦

快速排序氣泡排序

直接上程式碼~ 氣泡排序 private void swap(int[] arrays, int i, int j) { int temp; temp = ar

快速排序氣泡排序(面試題)

今天講一道前端開發的筆試題,題目如下: 編寫快速排序和氣泡排序,並簡單對比分析. 看到題目愣了一下,知道氣泡排序,可什麼是快速排序呢? 下面先來看一下氣泡排序: 方法一: 每一次對比相鄰兩個資料的大小,小的排在前面,如果前面的資料比後面的大就交換這兩個數的位置      

Java陣列中的選擇排序氣泡排序

兩種排序的思想 氣泡排序:在首輪,第一項和第二項比較,將大的放在後面,然後比較第二項和第三項,將大的放在後面,以此類推在首輪結束,最大的資料已經在最後一項了。在一輪輪的比較中,後面的已經排好的資料項越來越多,需要排序的資料項越來越少,直到為零。 選擇排序:在氣泡排序上做了優化,減少了交換次數,在首輪選擇最

選擇排序氣泡排序區別比較

https://blog.csdn.net/weixin_38277423/article/details/70304120 區別主要在交換的方式上 每一輪都把最大或最小的元素篩選出來放在相應的位置上 這是相同的  但是 對於每一輪 比如第一輪 要把1~n 中最大的那個放到n這個位置

#關於選擇排序氣泡排序演算法詳解

關於選擇排序與氣泡排序演算法詳解 本篇主要應C語言初學者對氣泡排序和選擇排序的一個初步介紹和認知 首先我們來認識下選擇排序 那什麼是選擇排序呢?選擇排序就是指在一推數組裡每一次從待排序的資料元素中選出最小(或最大)的一個元素,放在陣列最末的位置(最前面的位置也可

排序氣泡排序的比較

堆排序的過程是首先建立小頂堆(或者大頂堆),這個堆的特徵是根節點不大於(或者不小於)任何子節點。建立之後就可以通過每次取出堆中的第一個元素(這個堆的最小值或最大值)然後將新的堆調整從而下次再取第一個這種迴圈操作來得到一個有序的序列。 在建立堆的過程中都是從最後一個根節點開始

快速排序冒泡排序

java int end star ear cal ber instance pretty main 冒泡排序 private void swap(int[] arrays, int i, int j) { int temp;

排序氣泡排序快速排序

1、氣泡排序(Bubble Sort) 將n個記錄進行氣泡排序的主要方法: 第一趟:將第一個記錄與第二個記錄比較,再將第二個與第三個比較(如果逆序就交換)......直到第n-1個與第n個比較得出:第n個記錄最大(最小); 第二趟:將第一個記錄與第二個記錄比較,再將第二個

氣泡排序選擇排序的實現分析

氣泡排序與選擇排序是兩種非常基礎的排序方式,也是許多程式設計師入門的排序演算法。很多資料結構或者演算法教材清晰明瞭地描述了兩種排序的工作原理,複雜度等,但紙上得來終覺淺,為了摸清楚兩種演算法的效能,我還是親自動手操作了一波~~~ 下面請跟上我的思路~~~ 氣泡排序作為最最基礎的排序方法,應該

(排序演算法)linux c語言實現快速排序氣泡排序的改進版)

 快速排序演算法是對氣泡排序演算法的一種改進,氣泡排序是對單個元素的升降,快速排序是對所有元素的升降,不過這個升降是取了某一個標準的前提下,在本文程式碼中,就以a[i],其實就是以最左邊的元素為參考,比較交換之後,將這個參考元素放到分界的地方,即i的位置。 程式碼如下,裡面有比較詳細的

各種排序演算法,一步步更新(一),桶排序氣泡排序,選擇排序快速排序

部分方法來自我關注的博主  J_小浩子  謝謝 1 桶排序  bucketsort 1 桶排序 #include <stdio.h>//桶排序基本說明 int main(){     int data1[11]={0},tem

python: 選擇排序氣泡排序,插入排序快速排序

def selectSort(lyst): n = len(lyst) for i in range(n - 1): minindex = i for j in range(i + 1, n): if lyst[j] <

Python三種排序演算法的執行速度對比(快速排序氣泡排序、選擇排序)

最近看了一下快速排序演算法,據說速度比其他的排序演算法快,於是寫了三個排序演算法對比一下,分別是氣泡排序,快速排序,選擇排序,以下是三個排序演算法的程式碼: 氣泡排序   BubbleSort.py # -*- coding:utf8 -*- def Sort(list

幾種排序方法詳解(選擇排序氣泡排序、插入排序快速排序

由於本帖只是闡述幾種排序方法的原理、如何區分以及編寫幾種排序的簡單程式碼,所以直接給定陣列是 a[ ]={6,2,8,5,1},需要把以上5個數字按升序排列 1. 選擇排序法 (如果不想看解釋分析,直接往後拉看程式碼) 實質: 第一輪:通過對比陣列中前一個元素和後一個元素

java幾種排序簡單實現(快速排序氣泡排序,直接插入排序

package Test; import com.alibaba.fastjson.JSONObject; public class Test { static int[] arrays = new int[] { 3, 10, 11, 1, 8, 2, 9, 4 }; // index

選擇排序氣泡排序、合併排序快速排序、歸併排序的演算法原理

實驗目的: 掌握選擇排序、氣泡排序、合併排序、快速排序、歸併排序的演算法原理 分析不同排序演算法的時間效率和時間複雜度,以及理論值與實測資料的對比分析。 一、氣泡排序 演算法虛擬碼: for i=1 to n     

linux C開發day3: 氣泡排序選擇排序

今天在學了陣列的基礎上,認識理解兩種排序方法:氣泡排序法和選擇排序法。 心得:個人覺得選擇排序法在思維邏輯上比氣泡排序法要難些,對於這些排序要在理解的基礎上加強記憶,不需要自己去寫,只需將這些前人創作的程式碼記憶熟練即可。本文對選擇排序解釋不是很清楚,希望大神們指點! 一、氣泡排序法 氣

小川學習筆記--JAVA一個類實現多種排序氣泡排序快速排序、選擇排序、插值排序

JAVA氣泡排序、快速排序、選擇排序、插值排序 作者:程式猿劉小川 public static void main(String[] args) //主程式 { int data[] = {5,7,1,0,2,3,4,66,9,8};

Python--重溫氣泡排序選擇排序

今天又看了一下資料結構,就想著寫一下比較常見的排序, 冒泡的挨著的比較 li=[1,6,8,3,4,7,9] def maopao(): for i in range(len(li)-1): for j in range(i,len(li)-1): if li[j]>li[j+1]:

快速排序歸併排序------JavaScript實現

1.快速排序 演算法步驟: 在陣列中找到基準點(flag),其他數與之比較。 建立兩個陣列,小於基準點的數儲存在左邊陣列,大於基準點的數儲存在右邊陣列。 拼接陣列,然後左邊陣列與右邊陣列繼續執行1、2兩個步驟,直到最後完成陣列排序。(該步驟可以看出演算法存在迭代性質)