排序是計算機內經常進行的一種操作,其目的是將一組「無序」的資料元素調整為「有序」的資料元素。常用的排序演算法有選擇排序、插入排序、氣泡排序、希爾排序、歸併排序、快速排序、交換排序等。
1. 選擇排序
基本思想:每一趟(例如第 i 趟,i = 0, 1, ..., n-2)在後面 n-i 個帶排序的資料元素中選出關鍵字最小的元素,作為有序元素序列的第 i 個元素
時間複雜度:o(n^2)
空間複雜度:o(1)
是否穩定:不穩定
示例**:
void swap(int array, int k, inti)int selectsort(int a, int
len)
}swap(a, k, i);
}return0;
}
2. 插入排序
基本思想:當插入第 i(i >= 1)個元素時,前面的v[0], v[1], ..., v[i-1]已經排好序,這是,用v[i]的關鍵字與v[i-1], v[i-2], ... 的關鍵字進行比較,找到插入位置即將v[i]插入,原來位置上的物件向後順移。
時間複雜度:o(n^2)
空間複雜度:o(1)
是否穩定:穩定
示例**:
int insertsort(int a, intlen)
a[k] =temp;
}return0;
}
3. 氣泡排序
基本思想:設待排序資料元素序列中的元素個數為n,最多做 n-1 趟,i = 1, 2, ..., n-1。在第 i 趟中從後向前, j = n-1, n-2, ..., i,兩兩比較v[j-1]和v[j]的關鍵字。如果發生逆序,則交換v[j-1]和v[j]
時間複雜度:o(n^2)
空間複雜度:o(1)
是否穩定:穩定
示例**:
void swap(int array, int k, inti)int bubblesort(int a, int
len)}}
return0;
}
4. 希爾排序
基本思想:將待排序序列劃分為若干組,在每一組內進行插入排序, 以使整個序列基本有序,然後再對整個序列進行插入排序
時間複雜度:o(n*logn)
空間複雜度:o(1)
是否穩定:不穩定
示例**:
void swap(int array, int i, intj)void shellsort(int array, int len) //
o(n*n)
array[k] =temp;}}
while( gap > 1
);
}
5. 快速排序
基本思想:將待排序序列劃分為若干組,在每一組內進行插入排序, 以使整個序列基本有序,然後再對整個序列進行插入排序
時間複雜度:o(n*logn)
空間複雜度:o(1)
是否穩定:不穩定
示例**:
void swap(int array, int i, intj)int partition(int array, int low, int
high)
swap(array, low, high);
while( (low < high) && (array[low] <=pv) )
swap(array, low, high);
}return
low;
}void qsort(int array, int low, int
high)
}void quicksort(int array, int len) //
o(n*logn)
6. 歸併排序
基本思想:每一趟(例如第 i 趟,i = 0, 1, ..., n-2)在後面 n-i 個帶排序的資料元素中選出關鍵字最小的元素,作為有序元素序列的第 i 個元素
時間複雜度:o(n*logn)
空間複雜度:o(1)
是否穩定:穩定
示例**:
void swap(int array, int i, intj)void merge(int src, int des, int low, int mid, int
high)
else
}while( i <=mid )
while( j <=high )
}void msort(int src, int des, int low, int high, int
max)
else
free
(space);
}}void mergesort(int array, int len) //
o(n*logn)
7. 交換排序
前提條件:一組1, 2, ... , n陣列,各個元素不能重複。
基本思想:通過交換,把a[0] = 1, a[1] = 2, ... , a[n-1] = n
時間複雜度:o(n)
空間複雜度:o(1)
示例**:
int swapsort(int a, intlen)
}return0;
}
排序演算法 排序演算法彙總
排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...
排序演算法 排序演算法彙總
排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...
排序演算法 排序演算法彙總
排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...