1. 程式人生 > >排序演算法---交換排序(氣泡排序、快速排序)

排序演算法---交換排序(氣泡排序、快速排序)

#include <stdio.h>
void bubble_sort(int a[], int n)
{
        int i,j,tmp;
        for(i=0;i<n-1;i++)
                for(j=0;j>n-1-i;j++)
                        if(a[j]>a[j+1])
                        {
                                tmp=a[j];
                                a[j]=a[j+1];
                                a[j+1]=tmp;
                        }
}
int partition(int a[], int low, int high)
{
        int pivot=a[low];
        while(low<high)
        {
                while(low<high && a[high]>=pivot)--high;
                a[low]=a[high];
                while(low<high && a[low]<=pivot)++low;
                a[high]=a[low];
        }
        a[low]=pivot;
        return low;
}
void qsort(int a[], int low, int high)
{
        int pivot;
        if(low<high)
        {
                pivot=partition(a,low,high);
                partition(a,low,pivot-1);
                partition(a,mid+1,high);
        }
}
void quick_sort(int a[], int n)
{
        qsort(a,0,n-1);
}
 

相關推薦

排序演算法雜談(五) —— 關於快速排序的優化策略分析

1. 前提 2. 優化策略1:主元(Pivot)的選取 歸併排序(Merge Sort)有一個很大的優勢,就是每一次的遞迴都能夠將陣列平均二分,從而大大減少了總遞迴的次數。 而快速排序(Quick Sort)在這一點上就做的很不好。 快速排序是通過選擇一個主元,將整個陣列劃分(Partition)成

排序演算法之三路劃分的快速排序

當待排序元素序列中有大量的重複排序碼時,簡單的快速排序演算法的效率將會降到非常之低。一種直接的想法就是將待排序列分成三個子序列:一部分是排序碼比基準元素排序碼小的;一部分是與基準元素排序碼等值的;一部分是比基準元素排序碼大的,如下圖所示: 但是,如果我們直

排序演算法交換排序氣泡排序快速排序

前言 在前面幾篇部落格中總結了插入排序(直接插入和希爾排序)、選擇排序(直接選擇和堆排序)以及歸併排序,這裡將講下兩種選擇排序演算法——氣泡排序和快速排序。 氣泡排序 基本概念 氣泡排序相對快速排序而言相對簡單。冒泡就如同水裡的魚吐泡泡一樣,剛開始時泡泡很小,但

排序演算法---交換排序(氣泡排序快速排序)

#include <stdio.h> void bubble_sort(int a[], int n) { int i,j,tmp; for(i=0;i<n-1;i++) for(j=0;j&

排序演算法(直接插入氣泡排序選擇排序快速排序希爾排序排序歸併排序

main函式 int main() { int data[] = {1,2,6,3,4,7,7,9,8,5}; //bubble_sort(data,10); //select_sort(data,10); Insert_Sort(data,10); fo

氣泡排序選擇排序插入排序快速排序演算法耗時測試

import java.util.*; public class Test1 { public static void main(String[] args) throws Exception{ int[] arr1=new int[20000]; for(int i=0;i&l

【python資料結構與演算法】幾種排序演算法氣泡排序快速排序

以下排序演算法,預設的排序結果是從小到大。 一.氣泡排序: 1.氣泡排序思想:越大的元素,就像越大的氣泡。最大的氣泡才能夠浮到最高的位置。 具體來說,即,氣泡排序有兩層迴圈,外層迴圈控制每一輪排序中操作元素的個數——氣泡排序每一輪都會找到遍歷到的元素的最大值,並把它放在最後,下一輪排序時

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

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

3. 排序通常有多種演算法,如氣泡排序插入排序選擇排序希爾排序歸併排序快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)

3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現  [分值:20] 您的回答:(空)  (簡答題需要人工評分) package com.interview; /** * 各種排序演算法 */

C語言中常用排序演算法氣泡排序選擇排序插入排序希爾排序快速排序排序)實現比較

以下程式在win10 X64位作業系統,使用VS2017執行驗證可行 排序是非常重要且很常用的一種操作,有氣泡排序、選擇排序、插入排序、希爾排序、快速排序、堆排序等多種方法。 例項1 冒泡法排序 1.前言: 陣列中有N個整數,用冒泡法將它們從小到大(或從大到小)排序。冒泡法

JS實現排序演算法氣泡排序快速排序

const a = [21, 3, 242, 3432, 13, 13, 123, 4, 35, 22, 1]; // 氣泡排序 // 核心思想:每次比較相鄰的數,如果它們順序錯誤,就把它們交換過來。如同氣泡一樣往後翻滾。 // 最外層的迴圈,每次至少要讓一個元素歸位。 /

必須知道的八大種排序演算法【java實現】(一) 氣泡排序快速排序

氣泡排序   氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。   氣泡排序的示例:   氣

演算法(一)排序演算法(桶排序氣泡排序快速排序

第一次排序:首先,找一個"基準數",比如5,然後,先從右到左,找到第一個小於基準數的數,4,再從左到右,找到第一個大於基準數的數,9將它們進行交換,5,1,4,26,2,9,5,7,52,21繼續從右到左,尋找小於基準數的數,從左到右,尋找大於基準數的數,並交換,直到兩個相遇,5,1,4,2,26,9,5,7

Python八大演算法的實現,插入排序希爾排序氣泡排序快速排序直接選擇排序排序歸併排序基數排序

1、插入排序 描述 插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一

排序演算法整理:氣泡排序排序插入排序歸併操作快速排序希爾排序選擇排序

SortUtils.java package prms.utils.sort; import java.util.Arrays; /** * @ClassName: SortUtils * @Description: &lt;p&gt; 排序演算法 工具類 &l

排序演算法氣泡排序選擇排序插入排序歸併排序快速排序希爾排序

氣泡排序           核心:                       相鄰元素兩兩比較,大的往後放。第一次比較完畢以

七大內部排序演算法總結(插入排序希爾排序氣泡排序簡單選擇排序快速排序歸併排序排序

寫在前面:         排序是計算機程式設計中的一種重要操作,它的功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。因此排序掌握各種排序演算法非常重要。對下面介紹的各個排序,我們假定所有排序的關鍵字都是整數、對傳入函式的引數預設是已經檢查好了的。只

交換排序氣泡排序—改進快速排序

【氣泡排序(改進版本)】 複雜度:最好情況O(n),最壞O(n^2);演算法穩定 int a[10]={1,3,2,4,6,5,9,7,8,0}; int flag=9, last_flag=9;

排序演算法氣泡排序插入排序選擇排序快速排序對比

package com.test; public class T { public static void main(String[] args) { long start = System.currentTimeMillis(); int[] arr1 =

插入排序氣泡排序選擇排序快速排序排序歸併排序演算法比較

//插入排序、氣泡排序、選擇排序、快速排序、堆排序、歸併排序 #include"stdio.h" #include"stdlib.h" #include"time.h" #define M 1000 int shu[M]; //存放要排序的陣列 int chang;