快速排序定義c語言,c語言快速排序簡單代碼

本文目錄一覽:

C語言中快速排序法的原理及應用

「快速排序法」使用的是遞歸原理,下面我結合一個例子來說明「快速排序法」的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數–53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18,53,80,72,63,98},這樣一個數組的排序就變成了兩個小數組的排序–53左邊的數組和53右邊的數組,而這兩個數組繼續用同樣的方式繼續下去,一直到順序完全正確。

一般來說,冒泡法是程序員最先接觸的排序方法,它的優點是原理簡單,編程實現容易,但它的缺點就是–程序的大忌–速度太慢。

附上快速排序代碼:

#includestdio.h

void quicksort(int a[],int left,int right)

{

    int i,j,temp;

    i=left;

    j=right;

    temp=a[left];

    if(leftright)

        return;

    while(i!=j)

    {

        while(a[j]=tempji)

            j–;

        if(ji)

            a[i++]=a[j];

        while(a[i]=tempji)

            i++;

        if(ji)

            a[j–]=a[i];

        

    }

    a[i]=temp;

    quicksort(a,left,i-1);

    quicksort(a,i+1,right);

}

void main()

{

    int a[]={53,12,98,63,18,72,80,46,32,21};

    int i;

    quicksort(a,0,9);

    /*排好序的結果*/

    for(i=0;i10;i++)

        printf(“%4d\n”,a[i]);

}

關於快速排序C語言算法

//一點小問題而已,已為你改好

#include stdio.h

void Quick_sort (int s[], int l, int r )

{

if(lr)

{

int i=l,j=r,x=s[l];

while(ij)

{

while(ijs[j]=x)

{j–;}//從右向左找第一個小於x的數

if(ij)

{s[i++]=s[j];}

while(ijs[i]=x)

{i++;}//從左到右找第一個大於等於x的數

if(ij)

{s[j–]=s[i];}

}

s[i]=x;

Quick_sort(s,l,i-1);//遞歸

Quick_sort(s,i+1,r);

}

}

int main()

{

int arr[7] = { 1,9,7,6,5,35,15 };

int i;

printf(“之前的數組:”);

for (i = 0; i 7; i++) printf(“%3d”, arr[i]);

printf(“\n”);

Quick_sort(arr, 0, 6);

printf(“排序之後的數組:”);

for (i = 0; i 7; i++) printf(“%3d”, arr[i]);

printf(“\n”);

return 0;

}

c語言怎樣實現快速排序

includestdio.h

int arr_num[];

int length;

void quick_sort(int left, int right)

{

int i, j, c, temp;

if(leftright)

return;

i= left;

j= right;

temp = arr_num[i]

while(i != j)

{

while(arr_num[j]=temp ij)

{

j–;

}

while(arr_num[i]=temp ij)

{

i++;

}

if(ij)

{

c = arr_num[i];

arr_num[i] = arr_num[j];

arr_num[j] = c;

}

}

//left為起始值(參照值)此時的I為第一次排序結束的最後值,與參照值交換位置

arr_num[left] = arr_num[i];

arr_num[i] = temp;

//繼續遞歸直到排序完成

quick_sort(left, i-1);

quick_sort(i+1, right);

}

int main()

{

int i;

length = 7;

arr_num[length] = {23, 7, 17, 36, 3, 61, 49}

//快速排序調用

quick_sort(0, length-1);

//輸出排序後的結果

for(i=1;i=length;i++)

printf(“%d “,arr_num[i]);

getchar();getchar();

return 0;

}

C語言快速排序代碼

採用快速排序,用遞歸實現

#include stdio.h

#define N 10 //定義排序數組元素個數

int Qsort(int start,int length,int a[])//start排序的起始,length是要排序序列長度

{

int x = a;

int i,j;

i = start;

j = length -1;

while(i j)

{

if(x a[j])

j–;

else if(x a[j])

{

a[i] = a[j];

a[j] = x;

i++;

}

else if(x a[i])

{

a[j] = a[i];

a[i] = x;

j–;

}

else

i++;

}

if(start length-1)

{

Qsort(start,i,a);

Qsort(i+1,length,a);

}

}

void main()

{

int a[N] = {0};

int i;

for(i = 0;i N;i++)

scanf(“%d”,a[i]);

Qsort(0,N,a);

for(i = 0;i N;i++)

printf(“%d “,a[i]);

}

程序執行時輸入N個數,對這N個數進行排序,可以預設N的長度

誰有快速排序的C語言實現啊

#include stdio.h

typedef int InfoType;

#define n 10 //假設的文件長度,即待排序的記錄數目

typedef int KeyType; //假設的關鍵字類型

typedef struct { //記錄類型

KeyType key; //關鍵字項

InfoType otherinfo; //其它數據項,類型InfoType依賴於具體應用而定義

} RecType;

typedef RecType SeqList[n+1]; //SeqList為順序表類型,表中第0個單元一般用作哨兵

int Partition(SeqList R,int i,int j);

void main()

{

void QuickSort(SeqList R,int low,int high);

int i;

SeqList R;

printf(“請輸入欲排序的10個數:”);

for (i=1;i=n;i++)

scanf(“%d”,R[i].key);

printf(“排序前:”);

for (i=1;i=n;i++)

printf(“%d “,R[i].key);

printf(“\n”);

QuickSort(R,1,n);

printf(“排序後:”);

for (i=1;i=n;i++)

printf(“%d “,R[i].key);

printf(“\n”);

}

void QuickSort(SeqList R,int low,int high)

{ //對R[low..high]快速排序

int pivotpos; //劃分後的基準記錄的位置

if(lowhigh){ //僅當區間長度大於1時才須排序

pivotpos=Partition(R,low,high); //對R[low..high]做劃分

QuickSort(R,low,pivotpos-1); //對左區間遞歸排序

QuickSort(R,pivotpos+1,high); //對右區間遞歸排序

}

}

int Partition(SeqList R,int i,int j)

{//調用Partition(R,low,high)時,對R[low..high]做劃分,並返回基準記錄的位置

RecType pivot=R[i]; //用區間的第1個記錄作為基準

while(ij){ //用區間兩端交替向中間掃描,直至i=j為止

while(ij R[j].key=pivot.key) //pivot相當於在位置i上

j–; //從右向左掃描,查找第1個關鍵字小於pivot.key的記錄R[j]

if(ij) //表示找到的R[j]的關鍵字pivot.key

R[i++]=R[j]; //相當於交換R[i]和R[j],交換後i指針加1

while(ij R[i].key=pivot.key) //pivot相當於在位置j上

i++; //從左向右掃描,查找第1個關鍵字大於pivot.key的記錄R[i]

if(ij) //表示找到了R[i],使R[i].keypivot.key

R[j–]=R[i]; //相當於交換R[i]和R[j],交換後j指針減1

}

R[i]=pivot; //基準記錄已被最後定位

return i;

}

用C語言編程實現快速排序算法

給個快速排序你參考參考

/********************** 快速排序 ****************************

基本思想:在待排序的n個記錄中任取一個記錄(通常取第一個記錄),

  以該記錄為基準,將當前的無序區劃分為左右兩個較小的無

  序子區,使左邊的記錄均小於基準值,右邊的記錄均大於或

  等於基準值,基準值位於兩個無序區的中間位置(即該記錄

  最終的排序位置)。之後,分別對兩個無序區進行上述的劃

  分過程,直到無序區所有記錄都排序完畢。

*************************************************************/

/*************************************************************

函數名稱:static void swap(int *a, int *b)

參    數:int *a—整型指針

  int *b—整型指針

功    能:交換兩個整數的位置

返 回 值:無

說    明:static關鍵字指明了該函數只能在本文件中使用

**************************************************************/

static void swap(int *a, int *b)

{  

    int temp = *a;

    *a = *b;

    *b = temp;

}

int quickSortNum = 0; // 快速排序算法所需的趟數

/*************************************************************

函數名稱:static int partition(int a[], int low, int high)

參    數:int a[]—待排序的數據

  int low—無序區的下限值

  int high—無序區的上限值

功    能:完成一趟快速排序

返 回 值:基準值的最終排序位置

說    明:static關鍵字指明了該函數只能在本文件中使用

**************************************************************/

static int partition(int a[], int low, int high)

{

    int privotKey = a[low];  //基準元素

    while(low  high)

{   //從表的兩端交替地向中間掃描  

        while(low  high   a[high] = privotKey)   // 找到第一個小於privotKey的值

high–;  //從high所指位置向前搜索,至多到low+1位置  

        swap(a[low], a[high]);  // 將比基準元素小的交換到低端

        while(low  high   a[low] = privotKey)   // 找到第一個大於privotKey的值

low++;  //從low所指位置向後搜索,至多到high-1位置

        swap(a[low], a[high]);  // 將比基準元素大的交換到高端

    }

quickSortNum++;  // 快速排序趟數加1

return low;  // 返回基準值所在的位置

}  

/*************************************************************

函數名稱:void QuickSort(int a[], int low, int high)

參    數:int a[]—待排序的數據

  int low—無序區的下限值

  int high—無序區的上限值

功    能:完成快速排序算法,並將排序完成的數據存放在數組a中

返 回 值:無

說    明:使用遞歸方式完成

**************************************************************/

void QuickSort(int a[], int low, int high)

{  

    if(low  high)

{

        int privotLoc = partition(a, low, high); // 將表一分為二  

        QuickSort(a, low, privotLoc-1);          // 遞歸對低子表遞歸排序  

        QuickSort(a, privotLoc+1, high);         // 遞歸對高子表遞歸排序  

    }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/189685.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 08:11
下一篇 2024-11-29 08:11

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29

發表回復

登錄後才能評論