將各種常見排序演算法簡單實現了一下,包括:1、簡單插入排序;2、氣泡排序;3、簡單選擇排序;4、快速排序;5、希爾排序;6、堆排序;7、歸併排序
**如下:
#include#include#include#define len 10
//初始化陣列
void init(int arr, int len);
//列印陣列元素
void print(int arr, int len);
//列印堆元素
void printh(int arrh, int len);
//交換兩個整數的值
void swap(int & a, int & b);
//簡單插入排序
void insertsort(int arr, int len);
//氣泡排序
void bubblesort(int arr, int len);
//簡單選擇排序
void selectsort(int arr, int len);
//返回快排樞軸下標
int partion(int arr, int low, int high);
//快速排序
void quicksort(int arr, int low, int high);
//堆調整
void heapajust(int arrh, int s, int m);
//堆排序
void heapsort(int arrh,int len);
//希爾排序
void shellsort(int arr, int len);
//歸併
void merge(int arr, int temp, int s, int m, int t);
//歸併排序
void mergesort(int arr, int temp,int s, int t);
int main()
; srand((unsigned)time(null));
//簡單插入排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("插入排序後:");
insertsort(arr,len);
print(arr,len);
//氣泡排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("氣泡排序後:");
bubblesort(arr,len);
print(arr,len);
//簡單選擇排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("簡單選擇排序後:");
selectsort(arr,len);
print(arr,len);
//快速排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("快速排序後:");
quicksort(arr,0,len - 1);
print(arr,len);
//希爾排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("希爾排序後:");
shellsort(arr,len);
print(arr,len);
//對排序
init(arrh,len+1);
arrh[0] = 100;//將第乙個元素初始化為0
printf("\n原始資料:");
printh(arrh,len+1);
printf("堆排序後:");
heapsort(arrh,len);
printh(arrh,len+1);
//歸併排序
init(arr,len);
printf("\n原始資料:");
print(arr,len);
printf("歸併排序後:");
mergesort(arr,temp,0,len - 1);
print(arr,len);
return 0;
}//初始化陣列
void init(int arr, int len)
}//列印陣列元素
void print(int arr, int len)
//列印堆元素
void printh(int arrh, int len)
//交換兩個整數的值
void swap(int & a, int & b)
//簡單插入排序
void insertsort(int arr, int len)
}//氣泡排序
void bubblesort(int arr, int len)
}//如果沒交換元素,說明已排好序
if (!exchange)
}}//簡單選擇排序
void selectsort(int arr, int len)
}if (temp != i)
}}//返回快排樞軸下標
int partion(int arr, int low, int high)
arr[low] = temp;
return low;
}//快速排序
void quicksort(int arr, int low, int high)
if (low < high)
}//堆調整,大堆
void heapajust(int arrh, int s, int m)
arrh[s] = temp;
}//堆排序
void heapsort(int arrh,int len)
}//希爾排序
void shellsort(int arr, int len)
}}//歸併arr[s...t]
void merge(int arr,int temp, int s, int m, int t)
if ( s <= m )
}if ( j <= t )
}//將排好的元素再賦值回原陣列arr
for( i = mm; i <= t; i++ )
//printf("\n");
//free(temp);
}//歸併排序
void mergesort(int arr, int temp, int s, int t)
}
執行結果:
各種常見排序演算法
選擇排序 private static int selectsort int a return a 氣泡排序 private static int bubblesort int a return a 希爾排序 private static int shellsort int a while h 1 ...
C 各種常見排序演算法
1 氣泡排序的本質在於每一趟迴圈從陣列的頭走到尾找到最大的值放在最右邊,下一次迴圈繼續從剩下的n 1個數中尋找最大值放到最右邊。直到剩下最後倆個數比較交換後結束。2 比較方式也簡單易懂,拿公升序為例,用a i 與a i 1 比較,如果a i a i 1 swap a i a i 1 當然,如果10個...
各種排序演算法實現
1 選擇排序 最壞情況 時間複雜度為o n 2 平均時間複雜度o n 2 最好情況 時間複雜度為o n 2 最差空間複雜度 需要輔助空間o 1 不是穩定排序 實現 void swap int a,int b void selectionsort int a,int n if k i swap a i...