#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...