資料結構之---C語言實現快速排序(多個版本)
快速排序基本上有如下版本
一、國內教材雙向掃描版
二、單向掃描版本
三、隨機化版本
四、三數取中分割法
五、非遞迴版
這裡給我前兩個版本(較為常用)
版本一:
雙向掃描版本:
如圖:
程式碼如下:
//快速排序(版本一)
//帶樞軸
//楊鑫
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int a[MAXN + 1], n;
void QuickSort(int left, int right)
{
int i, j, t, temp;
if(left > right)
return;
temp = a[left];
i = left;
j = right;
while(i != j)
{
while(a[j] >= temp && i < j)
{
j--;
}
while(a[i] <= temp && i < j)
{
i++;
}
if(i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
QuickSort(left, i - 1);
QuickSort(i + 1, right);
}
int main()
{
printf("=========快速排序版本一==========\n");
int i = 0, j, t, count = 0;
int T;
printf("請輸入要對資料排序的個數:\n");
scanf("%d", &T);
while(T--)
{
scanf("%d", &a[i]);
i++;
}
QuickSort(0, i - 1);
printf("排序後的資料是:\n");
for(j = 0; j < i; j++)
{
printf("%d ", a[j]);
}
return 0;
}
版本二:
單項掃描:
void quickSort2(int x[], int l, int r)
{
if(l >= r)
return;
int m = l;
for(int i = l + l; i <= r; i++ )
{
if(x[i] < x[l])
{
swap2(x[++m], x[i]);
}
}
swap2(x[l], x[m]);
quickSort2(x, l, m - 1);
quickSort2(x, m + 1, r);
}
void swap2(int &a,int &b)
{
if(a==b) return;//對同一地址的資料交換,會使其結果為0
a=a^b;
b=a^b;
a=a^b;
}
相關文章
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- 資料結構 快速排序 C Swift 極簡版本資料結構排序Swift
- C語言實現的資料結構之------雜湊表C語言資料結構
- 快速排序演算法(C語言實現)排序演算法C語言
- 【資料結構】實現順序表(c語言)資料結構C語言
- 資料結構之C語言模擬整數陣列實現資料結構C語言陣列
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- 用c語言實現資料結構——單連結串列C語言資料結構
- C語言_資料結構和演算法之_排序和查詢C語言資料結構演算法排序
- 【資料結構】迴圈佇列 C語言實現資料結構佇列C語言
- 資料結構與演算法分析(c 語言描述)基數排序 陣列實現資料結構演算法排序陣列
- 資料結構c語言實現順序表基本操作資料結構C語言
- 基數排序-單連結串列實現【資料結構與演算法分析(c 語言描述)】排序資料結構演算法
- 【資料結構】快速排序資料結構排序
- 三種語言實現快速排序(C++/Python/Java)排序C++PythonJava
- C語言_資料結構圖(留個筆記)C語言資料結構筆記
- 資料結構--排序--插入排序--python語言描述資料結構排序Python
- 【C語言】氣泡排序與快速排序C語言排序
- 資料結構 桶排序 基數排序MSD c++ swift 版本資料結構排序C++Swift
- 資料結構與演算法之快速排序資料結構演算法排序
- 【資料結構】用C語言實現單連結串列及其常見操作資料結構C語言
- 資料結構雜湊表(c語言)資料結構C語言
- 資料結構 順序棧(c語言)資料結構C語言
- 排序演算法-C語言實現排序演算法C語言
- 資料結構與演算法分析(c 語言描述)多項式 ADT 單連結串列實現資料結構演算法
- 資料結構與演算法分析(c 語言描述)多項式 ADT 陣列實現資料結構演算法陣列
- c語言的一結構資料的堆疊實現問題薦C語言
- 資料結構之--氣泡排序的三種實現資料結構排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 複習資料結構:排序演算法(五)——快速排序的各種版本資料結構排序演算法
- 資料結構與演算法——在一個陣列中實現兩個堆疊(C語言)資料結構演算法陣列C語言
- C#資料結構與演算法5-C# 快速排序C#資料結構演算法排序
- C語言 連結串列排序C語言排序
- c語言資料結構補齊原則C語言資料結構
- 資料結構C語言|佇列相關資料結構C語言佇列
- c語言快速排序(庫函式使用)C語言排序函式
- C語言語法文字結構—接近完整版本C語言
- “c語言+結構體+連結串列”實現名片系統C語言結構體