排序:氣泡排序&快速排序
氣泡排序
1、基本思想:將第一個記錄的關鍵字與第二個記錄的關鍵字比較,若為逆序,則將兩個記錄交換,再向後比較。關鍵字小的漂浮,關鍵字大的下沉。
2、穩定性:演算法穩定。
3、時間複雜度:O(n²),空間複雜度:O(1)
4、程式碼實現:
#include<stdio.h>
#define N 5 /*陣列長度上限*/
int main()
{
int A[N],i,j,temp;
printf("請輸入五個數字:\n");
for(i=0;i<N;i++) /*給陣列賦值*/
scanf("%d",& A[i]);
for(i=1;i<N;i++)/*外層迴圈控制比較的輪數*/
for(j=0;j<N-i;j++)/*內層迴圈控制每一輪比較的次數*/
if(A[j]>A[j+1])/*前後兩組數比較交換*/
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
printf("氣泡排序結果為:\n");
for(i=0;i<N;i++)
printf("%d\t",A[i]);
return 0;
}
快速排序
1、基本思想:①從數列中取一個數作為基準數(樞軸)。②比基準數大的放右邊,小於等於的放左邊。③重複第二步至各區間只有一個數,達到整個序列有序。
2、具體操作:假設樞軸關鍵字為pivotkey,附設兩個指標low和high,初值分別為s和t。將樞軸記錄移至臨時變數,若high≥pivotkey,則high減1(符合劃分割槽間,進一步縮小範圍),否則將high所指關鍵字移至low所指位置(將不符合的關鍵字移至正確區間)。當high所指不符合要求後檢測low所指記錄,若low≤pivotkey,則low增1,否則將low所指關鍵字移至high所指位置。重複進行兩個方向的檢測,直至high與low兩個指標指向同一位置重合為止。
3、樞軸元素的選取:通常選取第一個元素。可選:首元素、尾元素、中值元素(首元素、尾元素、中間位置元素三者中中間大小的那個元素)、隨機元素。
4、穩定性:不穩定
5、時間複雜度:O(n),平均時間複雜度O(n lb n)
6、程式碼實現:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int array[MAX];
void FastSort(int n,int min,int max)//快速排序
{
int i=0;
int head,tail;
int t;
if(min<max)//從表的兩端交替地向中間掃描
{
head=min;
tail=max;
t=array[head];//記錄樞軸的位置
while(head!=tail)
{
while(head<tail&&array[tail]>=t)//從右向左掃描
tail--;
if(head<tail)
array[head++]=array[tail];//交換結點
while(head<tail&&array[head]<=t)//從左到右掃描
head++;
if(head<tail)
array[tail--]=array[head];
}
array[head]=t;
FastSort(n,min,head-1);
FastSort(n,tail+1,max);
}
}
void main()
{
int i,count=0;
char flag;
printf("請輸入要排序的數字\n");
for(i=0;flag!='\n';i++)
{
scanf("%d",&array[i]);
flag=getchar();
count++;
}
FastSort(count,0,count-1);
printf("快速排序結果為:\n");
i=0;
while(i<count)
{printf("%d ",array[i]);
i++;}
printf("\n");
}
相關文章
- 排序——氣泡排序排序
- 氣泡排序、歸併排序與快速排序比較排序
- Go實現氣泡排序和快速排序Go排序
- 【C語言】氣泡排序與快速排序C語言排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 氣泡排序排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 排序演算法--氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法–氣泡排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 【排序】氣泡排序(待補充)排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- js氣泡排序JS排序
- JavaScript氣泡排序JavaScript排序
- 氣泡排序1排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- 容器氣泡排序排序
- 氣泡排序法排序
- 氣泡排序(Java)排序Java
- Python 氣泡排序Python排序
- 氣泡排序 插入排序 快排排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 氣泡排序和選擇排序流程圖排序流程圖
- Java排序演算法之氣泡排序Java排序演算法
- 氣泡排序和選擇排序詳解排序
- 淺析氣泡排序排序
- 陣列氣泡排序陣列排序
- Python_氣泡排序Python排序
- 氣泡排序筆記排序筆記