八種排序演算法

2021-09-24 05:16:32 字數 2389 閱讀 5860

#include #include //氣泡排序

void boblesort(int * arr,int n);

//插入排序

void insertsort2(int *arr,int n);

//希爾排序

void shellsort2(int *arr,int n);

//選擇排序

void selectsort(int *arr,int n);

//歸併排序

void mergesort(int *arr,int n);

//快速排序

void quicksort(int *arr,int n);

//桶次排序

void bucketsort(int * arr,int n);

//堆排序

void minheapsort(int *arr,int n);

/*列印陣列中的元素*/

void printarray(int *arr,int n)

} }}///

/////插入排序,設陣列為a[0…n-1]。

//1. 初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

//2. 將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

//3. i++並重複第二步直到i==n-1。排序完成。

void insertsort1(int *arr,int n)

arr[j]=tmp;

}} }}

//將搜尋和資料後移這兩步合併

void insertsort2(int *arr,int n)

arr[j+1]=tmp;//這兒需要對arr[j+1]而不是對arr[j]賦值,因為上面迴圈的退出條件是arr[j]0;gap=gap/2)

arr[k+gap]=tmp;}}

} }

} void shellsort2(int *arr,int n)

arr[j+gap]=tmp;

} } }

}///

////*選擇排序:設陣列為a[0…n-1]。

1. 初始時,陣列全為無序區為a[0..n-1]。令i=0

2. 在無序區a[i…n-1]中選取乙個最小的元素,將其與a[i]交換。交換之後a[0…i]就形成了乙個有序區。

3. i++並重複第二步直到i==n-1。排序完成。*/

void selectsort(int *arr,int n)

}else

} }array[m]=data;

quicksort1(array,first,m-1);

quicksort1(array,m+1,last);}

/*快速排序2,一次先從右往左直到找到符合要求的值,再從左向右找到要求的值,效率比較高,注意遞迴跳出的條件

* */

void quicksort2(int *arr,int first,int last)

while(marr[m]) ++m;

if(data=0&&p!=0)

if(arr[j]>=tmp) break; //如果某一步子節點的值比tmp小,那麼可以停止繼續向下尋找了

arr[k]=arr[j];

k=j;

j=2*j+1;

} arr[k]=tmp;}

//刪除堆中的元素

void minheapdelete(int *arr,int n)

//堆化陣列

void makeminheap(int *arr,int n)

//對堆進行排序

void minheapsort(int *arr,int n)

}///

/////定義函式指標陣列型別,裡面的每乙個元素是一種指向某種排序函式的指標

typedef void (*sortfuc[8])(int *arr,int n);

int main();

//定義每種排序演算法的說明

const char * str[8]=;

//input用來接收使用者輸入,maxsize表示陣列最大大小,i用來表示動態陣列的下標

int input,maxsize,i=0;

printf("please input the max array size:");

scanf("%d",&maxsize);

int *arr=new int[maxsize];

//遇到結束符時停止接收資料,控制台下通過輸入ctrl+z並輸入回車來輸入eof

while(i=1&&input<=8)else }

delete arr;

return 0;

}

八種基本排序演算法

1 思路 對尚未排序的各元素從頭到尾依次比較相鄰的兩個元素是否逆序 與欲排順序相反 若逆序就交換這兩元素,經過第一輪比較排序後便可把最大 或最小 的元素排好 然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序 可以看出如果有 n 個元素,那麼一共要進行 n 1 輪比較,第 i 輪要進行...

八種常用排序演算法

include include include define len 10 1 冒泡 將序列每輪找出的最大值從下標n到0依次存放 void bubble int data,int len 2 直插 void insert int array,int n array j 1 temp 3 將array...

八種排序演算法總結

插入排序 1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void s...