Date: 2016-02-14 #####排序算法的學習 ####冒泡排序算法
#include <stdio.h> void Bubble_sort(int A[],int n); void Bubble_sort(int A[],int n){ int i,j,temp; for(i= 0 ;i < n - 1 ;i++){ for(j = 0;j< n -1 - i;j++){ if(A[j] > A[j+1]){ temp = A[j+1]; A[j+1] = A[j]; A[j] = temp; } } } } int main(int argc, const char * argv[]) { int A[7]={3,1,2,4,6,8,1}; Bubble_sort(A, 7); for(int i =0; i < 7;i++){ printf("%d",A[i]); } }
####改進的冒泡排序數組
void Bubble_sort(int A[],int n){ int i,j,temp,flag=0; for(i= 0 ;i < n - 1 ;i++){ for(j = 0;j< n -1 - i;j++){ if(A[j] > A[j+1]){ temp = A[j+1]; A[j+1] = A[j]; A[j] = temp; flag = 1; } } if(flag== 0){ break; }else{ flag = 0; } } }
####快速排序法學習
method: 變量left保存數組最小序號0,數組right保存數組最大(序號)長度n,在變量base 中保存A[0]爲基準,從數組右側開始逐個取出元素與base比較,若是小於base的值則將該數保存到A[left]中(A[0])元素中,接下來從數組左側開始逐個取出元素與base比較知道找到比base大的數據,(left隨着比較的位數自增),將這個比基準大的數存到A[right]中,接下來遞歸進行一樣的操做
ui
int Division(int a[],int left,int right){ int base = a[left]; //取左側元素爲基準元素 while(left<right){ //左側元素的序號小於右側 while (left<right&&a[right]>base) //當序號小於右側而且數組末尾的值大於基準,則向前挪一位(right-1) --right; a[left] = a[right]; //當找到了右側比基準小的數的時候令A[LEFT] 爲右側的值 while(left<right&&a[left]<base) //當序號小於右側時候,若是左側的數值比基準小則向後挪一位(left+1) ++left; a[right] = a[left]; //當找到左側比基準大的數字的時候,讓這個數字爲數組的末尾元素() } a[left] = base; //保存基準數 return left; //返回左側的值 } void QuickSort(int a[],int left,int right){ int i, j; if(left<right){ i = Division(a, left, right); QuickSort(a,left,i-1); //左側的數進行遞歸排序 QuickSort(a,i+1,right); //右側的數進行遞歸排序 } } int main(int argc, const char * argv[]) { // insert code here... int A[10]={94,84,54,80,62,83,37,24,67,29}; QuickSort(A,0,9); for(int i = 0;i<10;i++){ printf("%d",A[i]); } return 0; }
####簡單選擇排序算法code
void selectSort(int A[],int n ); void selectSort(int A[],int n){ int i,j,k,t; for(i = 0 ;i< n -1 ;i++){ //n-1位開始比較 k = i; //獲取當前位數 for(j =i+1 ;j< n;j++){ if(A[k]>A[j]){ //若是當前位數大於數組[K,N]的任何一位則,當前該數爲[K,N]中最小的數 k = j; } } t = A[i]; //進行交換 A[i] = A[k]; A[k] = t; } } int main(int argc, const char * argv[]) { int A[8]={15,2,8,3,1,9,7,6}; selectSort(A, 8); for(int i =0 ;i<8;i++){ printf("%d",A[i]); } }
####直接插入排序法排序
void insertSort(int A[],int n){ int i,t,j; for(i = 1 ;i<n;i++){ t= A[i]; //取出一個未排序的數據 for(j=i-1;j>=0&&t<A[j];j--) //在排序序列查找數據 A[j+1] = A[j]; //向後移動數據 A[j+1] = t; } } int main(int argc, const char * argv[]) { // insert code here... int A[6]={3,1,8,3,2,5}; insertSort(A, 6); for(int i =0 ;i<6;i++){ printf("%d",A[i]); } printf("Hello, World!\n"); return 0; }