1.交換排序(氣泡排序和快速排序)
阿新 • • 發佈:2019-02-01
交換排序的基本思想:兩兩比較關鍵字,當兩個記錄的次序相反時進行交換,直到完成排序為止。
(1)氣泡排序
基本思想:相鄰關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上“漂浮”直至“水面”。
氣泡排序是一個穩定的排序演算法,該演算法平均的時間複雜度是O(n^2)。void BubbleSort(int a[],int size)//氣泡排序 { for (int i=0;i<size;i++) { for (int j=0;j<size-i;j++)//比較找出本趟最小關鍵字 { if (a[j]>a[j+1]) { a[j] ^= a[j+1];//交換,小的關鍵字上移 a[j+1] ^= a[j]; a[j] ^= a[j+1]; } } } }
2.快速排序
基本思想:快速排序是由氣泡排序改進而得,採用一種分而治之的思想。在待排序的n個記錄中任取一個記錄(通常取第一個記錄),把該記錄放入適當位置後,資料序列被此記錄劃分成兩部分,所有關鍵字比該記錄關鍵字小的記錄放置在前一部分,所有比它大的記錄放置在後一部分,並把該記錄排在這兩部分的中間,此過程被稱為快速排序。簡而言之,每趟使表的第一個元素放入適當位置,將表一分為二,對子表按遞迴方式繼續這種劃分,直至劃分的子表長為0或1。
快速排序是一個不穩定的排序演算法,該演算法平均的時間複雜度是O(nlogn)。void QuickSort(int a[],int s,int t) { int i = s,j = t; int temp=a[s]; //以第一個元素為基準值 if (s<t) { while (i != j) //從區間兩端交替向中間掃描,直至i=j為止。 { while (i<j && a[j]>temp) //從右向左掃描,找到第一個小於基準值的元素。 { j--; } a[i] = a[j]; //找到該元素後,交換a[i]<->a[j]. while (i<j && a[i]<temp) //從右向左掃描,找到第一個小於基準值的元素。 { i++; } a[j]=a[i]; //找到該元素後,交換a[i]<->a[j]. } a[i]=temp; //找到基準值賦值到中間位置。比它小的在左側,比它大的在右側。 QuickSort(a,s,i-1); //對左區間遞迴排序 QuickSort(a,i+1,t); //對右區間遞迴排序 } }