1. 程式人生 > >快速排序(單向型1)

快速排序(單向型1)

#include <stdio.h>
int main()
{
 int data[10]={6,1,2,7,9,3,4,5,10,8};
   quicksort(data,0,9);
 int i;
 for(i=0;i<10;i++)
    printf("%d",data[i]);
    printf("\n");
    return 0;
}
void quicksort(int data[],int first,int last){
    int i,j,t,base;
    if(first>=last)
        return ;
        base=data[first];
        i=first;
        j=last;
        while (i<j)
             while(data[i]<=base&&i<j)
                  i++;
            while (data[j]>=base&&i<j)
            j--;


            if(i<j)
            {
                t=data[i];
                data[i]=data[j];
                data[j]=t;
            }
}
            if(data[i]>data[first])
                i--;
            if(i!=first)
            {
                data[first]=data[i];
                data[i]=base;
            }
            quicksort(data,first,i-1);
            quicksort(data,i+1,last);


}

相關推薦

快速排序單向1

#include <stdio.h> int main() {  int data[10]={6,1,2,7,9,3,4,5,10,8};    quicksort(data,0,9);  int i;  for(i=0;i<10;i++)     pri

算法——python實現快速排序二分法思想

append exc microsoft 部分 input temp style 數字 快速排序 實現思路   將所需要的數字存入一個列表中 首先,設置將最左側的那個數設置為基準數,在列表中索引為0 然後設置兩個移動位(用於比較),分別為最左邊和最右邊 然後最右邊那位向左

歸併排序快速排序三十二

        上節我們學習了氣泡排序和希爾排序,本節我們繼續學習歸併排序和快速排序。         1、歸並排序:將兩個或兩個以上的有序序列

快速排序荷蘭國旗java

經典的快速排序是思路如下: (1)就是將弱化版的荷蘭國旗問題中的num,替換成了陣列的最後一個位置的數字,即根據陣列的最後的一個數字,作為比較物件,然後分出大於和小於部分 (2)然後將左右兩個子陣列分別進行遞迴 首先我們看看弱化版的荷蘭國旗問題: 給定一個數組arr, 和一個數num

【資料結構與演算法】內部排序之四:歸併排序快速排序含完整原始碼

前言      之所以把歸併排序和快速排序放在一起探討,很明顯兩者有一些相似之處:這兩種排序演算法都採用了分治的思想。下面來逐個分析其實現思想。歸併排序實現思想       歸併的含義很明顯就是將兩個或者兩個以上的有序表組合成一個新的有序表。歸併排序中一般所用到的是2-路歸併

八大排序演算法 之 快速排序填坑法

排序思想: 1,將第一個數字作為基準數字,將陣列分為左右兩部分,左邊是比它小的數字,右邊是比它大的數字; 2,將左部分按照上面的思想再次進行劃分成兩部分,依次類推; 3,將右部分按照上面的思想再次進行劃分成兩部分,依次類推; 排序趟數: 不確定 排序原理: 填坑法: 1,將

快速排序遞迴版

快速排序是最經典的排序演算法,它用途廣泛,效率很高,也經常被拿來檢驗coder的基本功底。 此篇作為快排的學習筆記。 快排的基本思想 快速排序是典型的分治演算法,理解了快排的思想,很容易寫出遞迴版的程式碼。 快排分以下三個步驟. Choose

快速排序c語言實現

#include <stdio.h> #define T 1 #define F 0 #define MAXSIZE 10 //要排序陣列個數的最大值 typedef struct {

資料結構排序演算法之快速排序c語言實現

快排的原理就是通過一趟排序將待排記錄分割成獨立的兩部分,其中的一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。這其中,可以使用遞迴呼叫某一關鍵函式的辦法來實現這樣的功能。 分割的方法就是,選取一個樞軸,將所有關鍵字比它

JS實現快速排序2種方法

1、用i和j兩個指標 2、用一個指標判斷,大的放在右邊,小的數放在左邊 <!DOCTYPE html> <html> <head> <title>quickSort</title> <meta cha

Java集合框架上機練習題1

編寫一個Book類,該類至少有name和price兩個屬性。該類要實現Comarable介面,在介面的compareTo()方法中規定兩個Book類例項的大小關係為二者的price屬性的大小關係。在主

快速排序

最壞情況 sof 擴大 car ++i sta 混合 大於等於 python 上篇文章介紹了時間復雜度為O(nlgn)的合並排序,本篇文章介紹時間復雜度同樣為O(nlgn)但是排序速度比合並排序更快的快速排序(Quick Sort)。 快速排序是20世紀科技領域的十大算法之

快速排序Quicksort的Javascript實現

簡單 fun 遍歷數組 floor 演示 ont -s urn 元素 日本程序員norahiko,寫了一個排序算法的動畫演示,非常有趣。 這個周末,我就用它當做教材,好好學習了一下各種排序算法。 排序算法(Sorting algorithm)是計算機科學最古老、最基

冒泡排序+委托

lar private sin () using 排序 pan sch i+1 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Th

排序算法入門之快速排序java實現

大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換   快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序

快速排序分治法

ios type font nbsp def 註意 class 裏的 span 問題描述參考:http://blog.csdn.net/code_ac/article/details/74158681 算法實現部分: //random_quick_sort.cpp

快速排序

arr gpo 快速 and 情況 post 數據 wap 排序 隨機化快速排序:當一組數據近乎有序的時候,使用之前的快速排序的方法,每次都會選擇最左側的值作為標定值,將數據分為三部分,但是數據是近乎有序的數據,此時每次進行排序就不會將數據分為兩部分,此時logN的時間復雜

快速排序C++實現

font std clu temp secure 最重要的 esp 代碼 else 快速排序的基本實現 快速排序算法是一種基於交換的高效的排序算法,它采用了分治法的思想: 1、從數列中取出一個數作為基準數(樞軸,pivot)。 2、將數組進行劃分(partition),將

快速排序Quick Sort

sin aik tex 狀態 整體 splay 好的 優化 return 基本思想:   通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對著兩部分記錄進行排序,以達到整體有序的目的。 通俗點說就是:   在待排記錄中

快速排序快排

分數 處理 image [] oar length ref log quic 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數