冒泡排序、选择排序、插入排序、快速排序
2017-02-21 21:29
197 查看
#include<stdio.h> //冒泡排序,思想:从最末位开始 往前一位一位比较,比前一位小的话,就交换位置 //两个for,第一个for循环用于记录已排序的位置,第二个for循环用于已排序位置到结束位置之间的冒泡排序 void popsort(int *p ,int n) { int i=0,j=0; int temp= 0; for(i=0;i<n;i++) { for(j=n;j>i;j--) { if(p[j] < p[j-1]) { temp = p[j]; p[j] = p[j-1]; p[j-1]= temp; } } } } //选择排序,由前往后选择最小的数。一轮比较完后,将最小的数放到前面 //两个for循环,第一个for用于固定位置,第二个for用于查找固定位置后面最小的数,然后将最小的数和固定位置上的数交换 void SelectSort(int *p,int n) { int i,j,k; int temp; for(i=0;i<n;i++) { k = i; for(j=i+1;j<n;j++) { if(p[k] > p[j]) k = j; } if (k != i) { temp = p[k]; p[k] = p[i]; p[i] = temp; //将最小数,和本轮的起始位置互换 } } } //插入排序,插入前面都是已经顺序排序的序列。 //从第二个数开始(第一个数本身就是已排序序列),依次插入前面已排序的序列 void insertsort(int *p,int n) { int i,j; int temp; for(i = 1;i<n;i++) { int k = i; for(j = i-1;j>= 0;j--) { if(p[k] < p [j]) { temp = p[k]; p[k] = p[j]; p[j] = temp; k = j; } else { break; } } } } void swap(int *a,int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } //快速排序,时间复杂度O(logn)。二分法思想,每二分一次就能确定一个数的准确位置 //算法思想:取第一个数为哨兵,然后从最后面的数依次和哨兵比较(a、比哨兵的值小,就交换end和begin两个位置的值。否则end--,继续比较. //找到一个比哨兵小的值后。就开始从前面begin位置和哨兵值比较(b、比哨兵的值大,就交换begin和end两个位置的值。否则begin++,继续比较。 //------直到begin和end相等,结束一个递归,将哨兵的值赋值给begin的位置,这个位置就是该哨兵准确的位置 //代码,三个while循环:大while循环,确保完整扫描一遍数据,第二个while循环用于,end和哨兵的比较,第三个while循环用于,begin和哨兵的比较 void quicksort(int *p,int ibegin,int iend) { if(ibegin >= iend) return ; int i = ibegin; int j = iend; int iValue = p[ibegin]; while(ibegin < iend) { while(ibegin < iend) { if(iValue <= p[iend]) iend--; else { swap(p+ibegin,p+iend); break; } } while(ibegin < iend) { if(iValue >= p[ibegin]) ibegin ++; else { swap(p+ibegin,p+iend); break; } } } p[ibegin] = iValue; quicksort(p,i,ibegin-1); quicksort(p,ibegin+1,j); } void main() { int isuzu[]={2,33,4,55,8,5,7,88,22,22,99}; //popsort(isuzu,10); //SelectSort(isuzu,10); //insertsort(isuzu,10); quicksort(isuzu,0,10); int i=0; while(i<11) { printf("\n %d ",isuzu[i]); i++; } }
相关文章推荐
- C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序
- 冒泡排序、插入排序、快速排序、选择排序
- 用JS实现冒泡排序、插入排序、选择排序、快速排序
- 排序算法(插入排序、shell排序、冒泡排序、选择排序、合并排序、堆排序、快速排序、计数排序、基数排序、桶排序)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序,插入排序,快速排序,归并排序,堆排序,选择排序,希尔排序
- iOS开发--图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序
- java必须知道的八大种排序算法:冒泡排序、 选择排序、插入排序、快速排序、希尔算法、归并排序算法、基数排序、堆排序算法
- c语言排序算法(所有的都是升序,冒泡排序、插入排序、快速排序、选择排序、希尔排序、堆排序 )
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- java基本排序算法-插入排序-快速排序-选择排序-冒泡排序
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- swift 3.0 冒泡排序,插入排序,选择排序,快速排序
- 冒泡排序、快速排序、选择排序、插入排序、shell排序C代码
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)