生活随笔
收集整理的這篇文章主要介紹了
c语言 快速排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE 10
void display(int array[], int maxlen)
{
int i;
for(i = 0; i < maxlen; i++)
{
printf("%-3d", array[i]);
}
printf("
");
return ;
}
/********************************
*函數名:swap
*作用:交換兩個數的值
*參數:交換的兩個數
*返回值:無
********************************/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
return ;
}
/************************************
*函數名:quicksort
*作用:快速排序算法
*參數:
*返回值:無
************************************/
void quicksort(int array[], int maxlen, int begin, int end)
{
int i, j;
if(begin < end)
{
i = begin + 1; // 將array[begin]作為基準數,因此從array[begin+1]開始與基準數比較!
j = end; // array[end]是數組的最后一位
while(i < j)
{
if(array[i] > array[begin]) // 如果比較的數組元素大于基準數,則交換位置。
{
swap(&array[i], &array[j]); // 交換兩個數
j--;
}
else
{
i++; // 將數組向后移一位,繼續與基準數比較。
}
}
/* 跳出while循環后,i = j。
* 此時數組被分割成兩個部分 --> array[begin+1] ~ array[i-1] < array[begin]
* --> array[i+1] ~ array[end] > array[begin]
* 這個時候將數組array分成兩個部分,再將array[i]與array[begin]進行比較,決定array[i]的位置。
* 最后將array[i]與array[begin]交換,進行兩個分割部分的排序!以此類推,直到最后i = j不滿足條件就退出!
*/
if(array[i] >= array[begin]) // 這里必須要取等“>=”,否則數組元素由相同的值時,會出現錯誤!
{
i--;
}
swap(&array[begin], &array[i]); // 交換array[i]與array[begin]
quicksort(array, maxlen, begin, i);
quicksort(array, maxlen, j, end);
}
}
// 主函數
int main()
{
int n;
int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
int maxlen = BUF_SIZE;
printf("排序前的數組
");
display(array, maxlen);
quicksort(array, maxlen, 0, maxlen-1); // 快速排序
printf("排序后的數組
");
display(array, maxlen);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言 快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。