1. 程式人生 > >(排序演算法)linux c語言實現選擇排序演算法(氣泡排序的略微改進版)

(排序演算法)linux c語言實現選擇排序演算法(氣泡排序的略微改進版)

 快速排序演算法和氣泡排序演算法是差不多的,都是要兩層迴圈,外迴圈是要比較的個數,其實就是元素的個數,內迴圈就是外層那個標記和其他的比較大小,

氣泡排序是相鄰的兩個,兩兩比較,最後交換出一個最大或者最小值,

快速排序是在氣泡排序的基礎上,找出那個最小的或者最大的,但是不是直接交換,而是記下它的下標,最後把開頭和這個下標的元素交換。

快速排序演算法是不穩定的排序演算法,比氣泡排序演算法稍微快一點。

以下程式碼裡有快速排序和氣泡排序的程式碼,可以比較以下差異,

/***************************************************
##filename      : selectsort.c
##author        : GYZ                               
##e-mail        : 
[email protected]
##create time : 2018-10-31 09:54:39 ##last modified : 2018-11-05 11:07:30 ##description : NA ***************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> void selectSort(int a[],int n) { /*selection sort*/ int i = 0,j = 0; int min_index = 0; int temp = 0; for(i = 0; i < n; ++i) { for(j = i+1; j < n; ++j) { if(a[i] > a[j]) { min_index = j; } } temp = a[i]; a[i] = a[min_index]; a[min_index] = temp; } /*bubble sort*/ /* int temp = 0; int i = 0,j = 0; for(i = 0; i < n; ++i) { for(j = i+1; j < n; ++j) { if(a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } }*/ } void printArr(int a[],int n) { int i; for(i = 0; i < n; i++) { printf("%d,",a[i]); } printf("\n"); } int main(int argc,char *argv[]) { int length = 0; int begin,end; int a[] = {26,20,10,14,15,21,22,23,24,25,28,29,30,3,5,6,1,9,4,8,2,7,11,13,12,27,18,19,16,17}; length = sizeof(a) / sizeof(a[0]); begin = clock(); selectSort(a,length); end = clock(); printf("%d\n",end-begin); printArr(a,length); return 0; }