#include
#include
#include
#include
using namespace std;
void printarray(int a, int n);
/**插入排序**/
void insersort(int a, int n) //效率o(n*n)
a[x + 1] = temp;
}printarray(a, n);}}
/*選擇排序*/
void selectinsort(int a, int n)
}printarray(a, n);}}
/*堆排序*/
// 時間複雜度: o(nlogn )。
//curindex :當前調整的位置
//n :整個長度
void adjustheap(int a, int curindex, int n)
if (a[curindex] < a[right])
else
a[curindex] = temp;
}printarray(a, n);
}void buildheap(int a, int n)
}void heapsort(int a, int n)
}/*交換排序---> 冒泡*/
void bubblesort(int a, int n)}}
}/*交換排序---> 冒泡改進演算法1*/
void bubblesortnew1(int a, int n)
}i = pos; //位下一趟做準備
printarray(a, n);}}
/*找出最大和最小,冒泡法*/
void bubblesortnew2(int a, int n)
}printarray(a, n);
--high;*/
for (j = high; j > low; --j)
}++low;
printarray(a, n);}}
/**快速排序 (o(nlog2n))*/
void swap(int *a, int *b)
int biarypart(int a, int low, int high)
swap(&a[high], &temp);
while (low < high && temp < a[low])
swap(&a[low], &temp);
}printarray(a, 6);
return low;
}void quicksort(int a, int low, int high)
}/*歸併排序*/
// 合併
void merge(int a, int start, int mid, int end)
memset(left, 0, n1);
int *right;
right = (int *)malloc(sizeof(int)*n2);
if (null == right)
memset(right, 0, n2);
///int i = 0, j = 0;
for (i = 0; i < n1; i++)
for (j = 0; j < n2; j++)
i = j = 0;
int k = start;
while (i < n1 && j < n2)
else
}while (j < n2)
while (i < n1)
}void mergesort(int a, int start, int end)
}/*基數排序*/
/*列印輸出*/
void printarray(int a, int n)
printf("\n");
}int main()
;mergesort(a, 0, 5);
printarray(a, sizeof(a) / sizeof(a[0]));
return 0;
}
常用排序演算法整理
1.氣泡排序 void bubble sort int s,int len 2.插入排序 void insert sort int s,int len 3.快速排序 採用分治法,先選取乙個數pivot,把小於pivot的數移到它的左邊,大於pivot的數移到它的右邊,然後進行遞迴呼叫 int par...
關於常用的排序演算法
排序演算法 平均時間複雜度 氣泡排序 o n2 選擇排序 o n2 插入排序 o n2 希爾排序 o n1.5 快速排序 o n logn 歸併排序 o n logn 堆排序o n logn 基數排序 o d n r 所謂氣泡排序 就是比較兩個相鄰的數,大的下沉小的上浮,這種方法時間複雜度為o n ...
整理了下常用的排序演算法
例子中都是從小到大排序的。1 插入排序 1.1 直接插入排序 將乙個記錄插入到乙個有序的列表中,得到乙個新的,記錄數加一的新的列表。進行關鍵字比較和移動的次數約 n 2 4,時間複雜度o n 2 1.2 折半插入排序 在直接插入排序的基礎上減少比較的次數。其中 查詢 的動作用 折半查詢 來實現。只能...