欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言快速排序算法示例代碼分享

 更新時間:2014年02月28日 09:55:06   作者:  
快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)


步驟為:
1.從數(shù)列中挑出一個元素,稱為 "基準(zhǔn)"(pivot);
2.重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作。
3.遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。
遞歸的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

復(fù)制代碼 代碼如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define RANDOM(i) (rand()%i)
#define N 9    //設(shè)置數(shù)組長度

//分區(qū)操作
int Partition(int array[], int left, int right)
{
 int i,j;
 int temp;
 j = left-1;
 for (i=left; i<=right; i++)
 {
  if (array[i] <=  array[right]) //以最后一個數(shù)組的值為基準(zhǔn)
  {
   j++;
   temp = array[j];
   array[j] = array[i];
   array[i] = temp;
  }
 }
 return j;
}

//迭代運算
void QuikSort(int array[], int left, int right)
{
 int pivot;
 if (left < right)
 {
  pivot = Partition(array, left, right);
  QuikSort(array, left, pivot-1);
  QuikSort(array, pivot+1, right);
 }
}

//示例
int main()
{
 int i = 0;
 int a[N];
 srand((int)time(0));  //設(shè)置隨機數(shù)種子

 for (i=0; i<N; i++)  //排序前
 {
  a[i] = RANDOM(100);
  printf("%d\t", a[i]);
 }
 printf("\n\n");

 QuikSort(a, 0, N-1);

 for (i=0; i<N; i++) //排序后
 {
  printf("%d\t", a[i]);
 }
}

相關(guān)文章

  • 利用Matlab繪制甘特圖的方法詳解

    利用Matlab繪制甘特圖的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Matlab實現(xiàn)甘特圖(gantt?chart)的繪制,文中的示例代碼講解詳細,對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-10-10
  • C語言函數(shù)指針詳解

    C語言函數(shù)指針詳解

    本文主要介紹 C語言函數(shù)指針的知識,這里整理了詳細的資料及示例代碼以便大家學(xué)習(xí)參考,有需要學(xué)習(xí)此部分知識的朋友可以參考下
    2021-09-09
  • C語言?分析逆序字符串與字符串的逆序輸出有什么區(qū)別

    C語言?分析逆序字符串與字符串的逆序輸出有什么區(qū)別

    例如,給定一個字符串?s,將?s?中的字符順序顛倒過來,如?s?=?“abcd”,逆序后變成?“dcba”??梢圆捎枚喾N方法對字符串進行逆序,以下將對其中的方法和字符串的逆序輸出的區(qū)別進行分析
    2022-04-04
  • Qt+Quick實現(xiàn)圖片演示器的開發(fā)

    Qt+Quick實現(xiàn)圖片演示器的開發(fā)

    這篇文章主要為大家詳細介紹了Qt如何利用Quick實現(xiàn)圖片演示器的開發(fā),文中的示例代碼講解詳細,對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2023-01-01
  • C指針原理教程之C快速入門

    C指針原理教程之C快速入門

    C語言作為大學(xué)編程或者計算機專業(yè)的一門必修課,把很多初學(xué)編程的小伙伴都難住了,感覺無從下手,今天呢,我們來簡單介紹下,如何快速入門C語言
    2019-02-02
  • 使用C語言實現(xiàn)最小生成樹求解的簡單方法

    使用C語言實現(xiàn)最小生成樹求解的簡單方法

    這篇文章主要介紹了使用C語言實現(xiàn)最小生成樹求解的簡單方法,包括Prim算法和Kruskal算法的兩種求解方式,需要的朋友可以參考下
    2015-08-08
  • C++ 構(gòu)造雙向鏈表的實現(xiàn)代碼

    C++ 構(gòu)造雙向鏈表的實現(xiàn)代碼

    本篇文章是對C++中構(gòu)造雙向鏈表的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于C語言實現(xiàn)掃雷游戲

    基于C語言實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++?move()函數(shù)及priority_queue隊列使用記錄

    C++?move()函數(shù)及priority_queue隊列使用記錄

    move(obj)函數(shù)的功能是把obj當(dāng)做右值處理,可以應(yīng)用在對象的移動上,這篇文章主要介紹了C++?move()函數(shù)及priority_queue隊列使用記錄,需要的朋友可以參考下
    2023-01-01
  • Opencv實現(xiàn)最小外接矩形和圓

    Opencv實現(xiàn)最小外接矩形和圓

    這篇文章主要為大家詳細介紹了Opencv實現(xiàn)最小外接矩形和圓,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評論