快速排序演算法(C語言實現)
先看一下快速排序演算法(C語言實現 )
#include <stdio.h>
void quicksort(int array[], int min, int max);
int partition(int array[], int min, int max)
{
int p; p = array[min];
//int len = max;
while (min < max)
{
while (array[max] >= p && min < max)
{
max--;
}
array[min] = array[max];
while (array[min] <= p && min < max)
{
min++;
}
array[max] = array[min];
}
array[min] = p;
//printf("分界:%d\n", min);
return min;
}
void quicksort(int array[], int min, int max, int n)
{
int p;
p = partition(array, min, max);
//printf("p = %d\n", p);
printf("執行結果:");
for (int i = 0; i <= 11; i++)
{
printf("%d ", array[i]);
}
printf("\n");
if (min < max)
{
printf("第%d次前序遞迴執行:", n);
printf("quicksort(array, %d, %d)\n", min, p - 1);
quicksort(array, min, p - 1, n); n++;
//partition(array, p+1 , max);
printf("第%d次後序遞迴執行:", n);
printf("quicksort(array, %d, %d)\n", p + 1, max);
quicksort(array, p + 1, max, n);
}
}
int main()
{
int arr[] = { 5, 9, 2, 7, 8, 3,1,4, 11, -10, 10, 0 };
//printf("%d\n", sizeof(arr) / sizeof(arr[0]));
int min = 0;
int max = sizeof(arr) / sizeof(arr[0]) - 1;
//int p = partition(arr, min, max);
//printf("min的值為:%d\n", min);
//partition(arr, min, p);
printf("進入遞迴之前執行:");
printf("quicksort(array, %d, %d)\n", 0, 11);
quicksort(arr, min, max, 1);
return 0;
}
列印結果:
進入遞迴之前執行:quicksort(array, 0, 11)執行結果:0 -10 2 4 1 3 5 8 11 7 10 9第1次前序遞迴執行:quicksort(array, 0, 5)執行結果:-10 0 2 4 1 3 5 8 11 7 10 9第1次前序遞迴執行:quicksort(array, 0, 0)執行結果:-10 0 2 4 1 3 5 8 11 7 10 9第2次後序遞迴執行:quicksort(array, 2, 5)執行結果:-10 0 1 2 4 3 5 8 11 7 10 9第2次前序遞迴執行:quicksort(array, 2, 2)執行結果:-10 0 1 2 4 3 5 8 11 7 10 9第3次後序遞迴執行:quicksort(array, 4, 5)執行結果:-10 0 1 2 3 4 5 8 11 7 10 9第3次前序遞迴執行:quicksort(array, 4, 4)執行結果:-10 0 1 2 3 4 5 8 11 7 10 9第4次後序遞迴執行:quicksort(array, 6, 5)執行結果:-10 0 1 2 3 4 5 8 11 7 10 9第2次後序遞迴執行:quicksort(array, 7, 11)執行結果:-10 0 1 2 3 4 5 7 8 11 10 9第2次前序遞迴執行:quicksort(array, 7, 7)執行結果:-10 0 1 2 3 4 5 7 8 11 10 9第3次後序遞迴執行:quicksort(array, 9, 11)執行結果:-10 0 1 2 3 4 5 7 8 9 10 11第3次前序遞迴執行:quicksort(array, 9, 10)執行結果:-10 0 1 2 3 4 5 7 8 9 10 11第3次前序遞迴執行:quicksort(array, 9, 8)執行結果:-10 0 1 2 3 4 5 7 8 9 10 11第4次後序遞迴執行:quicksort(array, 10, 10)執行結果:-10 0 1 2 3 4 5 7 8 9 10 11第4次後序遞迴執行:quicksort(array, 12, 11)執行結果:-10 0 1 2 3 4 5 7 8 9 10 11
由遞迴的順序:
1 執行quicksort(arr, 0, 9,0) 執行到quicksort(array, min, p-1,n) 函式會回到開始的位置;執行quicksort(array, 0, 5);
2,再重複1 quicksort(array, 0, 0) 此時第一
2 執行
相關文章
- 排序演算法-C語言實現排序演算法C語言
- 三種語言實現快速排序(C++/Python/Java)排序C++PythonJava
- C語言實現九大排序演算法C語言排序演算法
- 經典排序演算法的 C語言 | Java 實現排序演算法C語言Java
- 【C語言】氣泡排序與快速排序C語言排序
- 快速排序演算法C++實現排序演算法C++
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- c語言快速排序(庫函式使用)C語言排序函式
- 快速排序用C語言可以這麼寫排序C語言
- PID演算法的C語言實現演算法C語言
- 排序演算法-Java實現快速排序演算法排序演算法Java
- 排序演算法之快速排序的實現排序演算法
- 如何使用Python語言實現計數排序演算法?Python排序演算法
- 三種語言實現歸併排序(C++/Python/Java)排序C++PythonJava
- 【程式設計師面試演算法】快速排序,9種主流程式語言實現!程式設計師面試演算法排序
- 資料結構與演算法分析(c 語言描述)基數排序 陣列實現資料結構演算法排序陣列
- C語言 遞迴實現二叉排序樹的插入C語言遞迴排序
- 歸併排序——C語言排序C語言
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 掃雷--C語言實現C語言
- c語言實現階乘C語言
- 演算法-一步步教你如何用c語言實現堆排序(非遞迴)演算法C語言排序遞迴
- 基數排序-單連結串列實現【資料結構與演算法分析(c 語言描述)】排序資料結構演算法
- C++快速排序與歸併排序的實現(LeetCode 912)C++排序LeetCode
- 快速排序的三種實現方法 (C++)排序C++
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 【作業系統】銀行家演算法實現(C語言)作業系統演算法C語言
- c語言 - 模仿qsort的功能實現一個通用的氣泡排序C語言排序
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- 練手必備 | C 語言快速實現五子棋
- C 語言實現整數快速模除(modulo)和地板除(floordiv)
- C語言__LINE__實現原理C語言
- C語言實現檔案加密C語言加密
- c語言實現this指標效果C語言指標
- 高精度加法(C語言實現)C語言
- C語言實現TCP通訊C語言TCP
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- C語言解決排序問題C語言排序