冒泡和快速排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/y331271939/article/details/45538629

1.冒泡排序

void bubbling_sort(int[] myInt){
		int temp;
		for (int i = 0; i < myInt.length; i++) {
			for (int j = 0; j < myInt.length - 1 - i; j++) {
				if(myInt[j] > myInt[j + 1]){
					temp = myInt[j];
					myInt[j] = myInt[j + 1];
					myInt[j + 1] = temp;
				}
			}
		} 
}

2.快速排序

/*
 * @param  myInt[] 要排序的数组
 * @param  l 排序数组的第一个下标
 * @param  r 排序数组的最后一个下标
 * 
 * eg: quick_sort(myInt, 0, myInt.length - 1);
 */
 void quick_sort(int myInt[], int l, int r){
 /*
 原理:找一个基准数将数组分为两部分,大于基准数的都在右边,小于基准数的都在左边,然后将分成的两部分再分别以基准数的方式分成两部分,后面以此类推
 */
	if (l < r){//l<r用来终止递归
		int i = l, j = r;
		int key = myInt[l];//选数组中第一个数为基准数
/*
最外层循环首先以基准数key将数组分为大于key和小于key的两部分,i=j时最外层循环结束	
*/
		while (i < j){
/*
当myInt[j]小于基准数时将myInt[i]换为myInt[j],并结束当前循环,否则j向前走继续查找小于基准数的myInt
*/
			while(i < j){
				if(myInt[j] < key){
				//将i+1,此处i不是必须要+1的,不+1结果一样,不过每次多比较一个
					myInt[i++] = myInt[j];
					break;
				}else{
					j--;  
				}
			}

/*
当myInt[i]大于基准数时将myInt[j]换为myInt[i],并结束当前循环,否则i向后走继续查找大于基准数的myInt
*/
			while(i < j){
				if(myInt[i] > key){
				   //j--同上
					myInt[j--] = myInt[i];
					break;
				}else{
					i++;
				}
			}
	    }
	   
	    myInt[i] = key;//最后将基准数给myInt[i]
	    quick_sort(myInt, l, i - 1);//递归调用排基准数左边的数组
	    quick_sort(myInt, i + 1, r);//递归调用排基准数右边的数组
  }
}

猜你喜欢

转载自blog.csdn.net/y331271939/article/details/45538629
今日推荐