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; }